qua*_*ano 27 python methods assert instance
如何检查变量是否是实例方法?我正在使用python 2.5.
像这样的东西:
class Test:
def method(self):
pass
assert is_instance_method(Test().method)
Run Code Online (Sandbox Code Playgroud)
Tom*_*ham 45
inspect.ismethod 如果你肯定有一个方法,而不仅仅是你可以调用的东西,那么你想知道的是什么.
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
Run Code Online (Sandbox Code Playgroud)
callable如果参数是一个方法,一个函数(包括lambdas),一个带有__call__或一个类的实例,则为true .
方法具有与函数不同的属性(如im_class和im_self).所以你要
assert inspect.ismethod(Test().method)
Run Code Online (Sandbox Code Playgroud)
如果您想知道它是否恰好是实例方法,请使用以下函数.(它考虑在元类上定义并在类类方法上访问的方法,尽管它们也可以被视为实例方法)
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
Run Code Online (Sandbox Code Playgroud)
通常检查这是一个坏主意.能够与方法交替使用任何callable()更灵活.