当你拥有的所有东西都是可调用的时候,是否有办法获得对方法类的访问权限

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)

我如何访问BarFoo从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__用于旧式课程.