Python 确定是否可以从类或实例调用callable

Python 确定是否可以从类或实例调用callable,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 除了查阅文档之外,没有其他方法可以判断。没有任何编程方法可以推断函数作者的意图。始终可以从类“直接”调用函数,只要传递所需的参数,请考虑: In

我如何确定某个方法或函数或任何可调用的东西可以按原样调用,或者它是否绑定到实例

检查不包括所有情况。即,这是绑定到实例还是绑定到类:

PY>inspect.ismethod(object.__subclasshook__)
False
PY>inspect.isfunction(object.__subclasshook__)
False

除了查阅文档之外,没有其他方法可以判断。没有任何编程方法可以推断函数作者的意图。始终可以从类“直接”调用函数,只要传递所需的参数,请考虑:

In [1]: class Foo:
   ...:     def speak(self):
   ...:         print('hello')
   ...:

In [2]: Foo().speak()
hello

In [3]: Foo.speak(None)
hello
但很明显,作者的意思是将
speak
作为一种实例方法


我想您可以排除零参数的函数可以从实例调用,但对于类中的函数来说,这是一种非常不规则的情况(除非它实际上是一个
staticmethod
对象)

除了查阅文档之外,没有其他方法可以判断。没有任何编程方法可以推断函数作者的意图。始终可以从类“直接”调用函数,只要传递所需的参数,请考虑:

In [1]: class Foo:
   ...:     def speak(self):
   ...:         print('hello')
   ...:

In [2]: Foo().speak()
hello

In [3]: Foo.speak(None)
hello
但很明显,作者的意思是将
speak
作为一种实例方法

我想您可以排除具有零参数的函数可以从实例调用,但对于类中的函数来说,这是一种非常不规则的情况(除非它实际上是一个
staticmethod
对象)