変数がインスタンスメソッドであるかどうかを確認するにはどうすればよいですか? 私はpython 2.5を使用しています。
このようなもの:
class Test:
def method(self):
pass
assert is_instance_method(Test().method)
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
callable
引数がメソッド、関数 (s を含む)、またはクラスlambda
のインスタンスである場合、引数は true です。__call__
メソッドには、関数とは異なるプロパティがあります (im_class
や などim_self
)。あなたが望んでいるのは
assert inspect.ismethod(Test().method)
正確にインスタンス メソッドであるかどうかを知りたい場合は、次の関数を使用します。(メタクラスで定義され、クラス クラス メソッドでアクセスされるメソッドを考慮しますが、それらはインスタンス メソッドと見なすこともできます)
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
通常、それを確認することは悪い考えです。callable()をメソッドと交換可能に使用できる方がより柔軟です。