Python中如何在父类方法内无需实例化访问子类的__class__属性
解决方案
可以通过@classmethod装饰器实现你的需求,不需要实例化类,直接通过类名调用即可拿到子类引用:
class A: @classmethod def f(cls): print(cls) class B(A): pass B.f() # 输出结果:<class '__main__.B'>
原理解释
- 你最开始写的无参方法里的
__class__是函数定义阶段就绑定到定义所在的A类的词法变量,不会随调用方的类变化,所以调用B.f()始终输出A类。 @classmethod装饰的方法会自动把调用该方法的类本身作为第一个参数cls传入,不管是父类还是子类调用,cls都会对应到实际调用的类对象,完全不需要额外实例化类。
内容的提问来源于stack exchange,提问作者Pedro Ilidio
相关产品推荐
相关产品推荐

