Python:如何在静态类方法中访问所属父类的名称?
如何在Static实例中访问所属类的名称
你的代码里Static并非Python意义上的静态类,只是作为A、B的类属性存在的实例。默认情况下,Static的实例没办法直接知道自己被哪个类的属性引用,因为实例本身不会自动记录这种关联关系。要实现bar方法打印所属类名称的需求,可以用以下两种方案:
方案一:初始化时传入所属类
修改Static类,在创建实例时接收所属类作为参数并保存,后续bar方法直接读取该参数的类名:
class Static: def __init__(self, owner_class): self.owner = owner_class def bar(self): parent_name = self.owner.__name__ print(parent_name) class A: object = Static(A) def foo(self): A.object.bar() class B: object = Static(B) def foo(self): B.object.bar() A().foo() # 输出:A B().foo() # 输出:B
方案二:动态绑定所属类属性
如果不想改动Static的初始化逻辑,可以在类定义时,给Static实例手动添加一个记录所属类的属性:
class Static: def bar(self): parent_name = self.owner.__name__ print(parent_name) class A: object = Static() object.owner = A def foo(self): A.object.bar() class B: object = Static() object.owner = B def foo(self): B.object.bar() A().foo() # 输出:A B().foo() # 输出:B
关键点说明
Python中,实例被赋值给类属性时,不会自动和所属类建立关联,必须通过手动传递、绑定的方式把类的引用交给实例,这样bar方法才能获取到对应的类名称。
内容的提问来源于stack exchange,提问作者PinkFloyd
相关产品推荐
相关产品推荐

