#python #python-3.x #python-3.6
#python #python-3.x #python-3.6
Вопрос:
Как я могу определить, что какой-либо метод или функция или любой другой вызываемый объект может быть вызван как есть или он привязан к экземпляру?
проверка не охватывает все случаи. Т. Е. связано ли это с экземпляром или с классом:
PY>inspect.ismethod(object.__subclasshook__)
False
PY>inspect.isfunction(object.__subclasshook__)
False
Ответ №1:
Нет другого способа определить, кроме как обратиться к документации. Не существует программного способа определить намерение автора ваших функций. Вы всегда можете вызвать функцию «напрямую» из класса, если вы передаете требуемые аргументы, учитывайте:
In [1]: class Foo:
...: def speak(self):
...: print('hello')
...:
In [2]: Foo().speak()
hello
In [3]: Foo.speak(None)
hello
Но очевидно, что автор имел в виду, что speak
это метод экземпляра.
Я полагаю, вы могли бы исключить функции с нулевыми параметрами как вызываемые из экземпляра, но это было бы крайне нерегулярной ситуацией для функции в классе (если это на самом деле не staticmethod
объект)