我有这样的代码:
class Foo:
def foo(self):
pass
class Bar:
def foo(self):
pass
f = random.choice((Foo().foo, Bar().foo))
如何访问Bar
或Foo
从f访问?
f.__dict__
几乎没有帮助,但如所repr(f)
提供,<bound method Bar.foo of <__main__.Bar object at 0x10c6eec18>>'
它必须是可能的,但是如何呢?
每个绑定方法的__self__
属性为
此方法绑定到的实例,或者
None
(从这里复制)
有关绑定方法的更多信息(来自Data Model):
如果通过实例访问方法(在类命名空间中定义的函数),则会得到一个特殊对象:绑定方法(也称为实例方法)对象。...绑定方法具有两个特殊的只读属性:
m.__self__
是该方法在其上操作的对象...
因此,f.__self__
您将获得类实例:
print(f.__self__) # <__main__.Foo object at 0x7f766efeee48>
并且type(f.__self__)
或f.__self__.__class__
将为您提供类型对象:
print(type(f.__self__)) # <class '__main__.Foo'>
你只使用__class__
了旧样式类。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句