You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 02:05:02