我想检查(在我的测试中)对象的方法与给定类的方法相同。
class Cls:
def foo(self):
pass
obj = Cls()
assert obj.foo == Cls.foo # assert will fail
如果绑定方法与未绑定方法相同('绑定'除外),可以使用哪个操作代替obj.foo == Cls.foo
生成True
?
答案 0 :(得分:4)
在Python 3中:
>>> class Cls:
... def foo(self):
... pass
...
>>> obj = Cls()
>>> obj.foo
<bound method Cls.foo of <__main__.Cls object at 0x101d8f588>>
>>> dir(obj.foo)
['__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__func__', '__ge__', '__get__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
>>> obj.foo.__func__
<function Cls.foo at 0x101d92400>
>>> obj.foo.__func__ is Cls.foo
True
查看对象的dir()
是一种探索和查找可能有用的属性的简单方法。
答案 1 :(得分:4)
在Python 2.7.x上:
>>> Cls.foo.__func__ is obj.foo.__func__
True
答案 2 :(得分:2)
将bruno desthuilliers's solution for Python 2.7和Alex Hall's solution for Python 3合并到适用于两个版本的版本:
class Cls:
def foo(self):
pass
obj = Cls()
assert getattr(Cls.foo, '__func__', Cls.foo) is obj.foo.__func__