callable является истинным, если аргумент, если аргумент является методом, функцией (включая lambda s), экземпляром с __call__ или классом.
Методы имеют разные свойства, чем функции (например, im_class и im_self). Итак, вы хотите
assert inspect.ismethod(Test().method)
Ответ 2
Если вы хотите узнать, использует ли именно метод экземпляра следующую функцию. (Он рассматривает методы, которые определены в метаклассе и доступны для методов класса, хотя они также могут рассматриваться как методы экземпляров)
import types
def is_instance_method(obj):
"""Checks if an object is a bound method on an instance."""
if not isinstance(obj, types.MethodType):
return False # Not a method
if obj.im_self is None:
return False # Method is not bound
if issubclass(obj.im_class, type) or obj.im_class is types.ClassType:
return False # Method is a classmethod
return True
Обычно проверка на это - плохая идея. Более гибко использовать любые вызываемые() взаимозаменяемые методы.