Kim*_*ais 10 python methods metaprogramming
我的代码如下:
class Foo:
def foo(self):
pass
class Bar:
def foo(self):
pass
f = random.choice((Foo().foo, Bar().foo))
Run Code Online (Sandbox Code Playgroud)
我如何访问Bar或Foo从f?
f.__dict__是的几乎没有帮助,但repr(f)给<bound method Bar.foo of <__main__.Bar object at 0x10c6eec18>>'它必须是可行的,但如何?
vau*_*tah 16
每个绑定方法都具有__self__属性
此方法绑定的实例,或
None
(从这里复制)
有关绑定方法的更多信息(来自数据模型):
如果通过实例访问方法(类名称空间中定义的函数),则会得到一个特殊对象:绑定方法(也称为实例方法)对象....绑定方法有两个特殊的只读属性:
m.__self__是方法操作的对象...
所以f.__self__会得到你的类实例:
print(f.__self__) # <__main__.Foo object at 0x7f766efeee48>
Run Code Online (Sandbox Code Playgroud)
而且type(f.__self__)或f.__self__.__class__会得到你的类型的对象:
print(type(f.__self__)) # <class '__main__.Foo'>
Run Code Online (Sandbox Code Playgroud)
您只能__class__用于旧式课程.
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |