Python:断言变量是实例方法?

Python:断言变量是实例方法?,python,methods,instance,assert,Python,Methods,Instance,Assert,如何检查变量是否为实例方法?我正在使用python 2.5 大概是这样的: class Test: def method(self): pass assert is_instance_method(Test().method) 如果您想知道它是否正是一个实例方法,请使用以下函数。(它考虑在元类上定义并在类方法上访问的方法,尽管它们也可以被视为实例方法) 通常检查这是个坏主意。能够与方法互换使用任何callable()更灵活。是您想要了解的,如果您确实有一个方法,而不仅

如何检查变量是否为实例方法?我正在使用python 2.5

大概是这样的:

class Test:
    def method(self):
        pass

assert is_instance_method(Test().method)

如果您想知道它是否正是一个实例方法,请使用以下函数。(它考虑在元类上定义并在类方法上访问的方法,尽管它们也可以被视为实例方法)

通常检查这是个坏主意。能够与方法互换使用任何callable()更灵活。

是您想要了解的,如果您确实有一个方法,而不仅仅是您可以调用的东西

import inspect

def foo(): pass

class Test(object):
    def method(self): pass

print inspect.ismethod(foo) # False
print inspect.ismethod(Test) # False
print inspect.ismethod(Test.method) # True
print inspect.ismethod(Test().method) # True

print callable(foo) # True
print callable(Test) # True
print callable(Test.method) # True
print callable(Test().method) # True
如果参数是一个方法、一个函数(包括
lambda
s)、一个具有
\uuu调用的实例或一个类,则
可调用的为真

方法具有不同于函数的属性(如
im\u类
im\u自身
)。所以你想要

assert inspect.ismethod(Test().method)  

在这里提问有什么不对?阅读源代码没有任何帮助-可能他正在编写一些代码,需要在运行时知道答案。可能会迭代对象上的所有属性,例如,+1,inspect是好的(而且“违抗的”输入法实际上读起来很好;-)。使用Python 3.5,
inspect.ismethod(Test.method)
返回False。您应该使用Test的实例,因为它是实例方法``inspect.ismethod(Test().method)```
assert inspect.ismethod(Test().method)