Python:如何将类名赋值给类的类变量?
解决Python类变量中获取类名的问题
你遇到的问题本质是类定义过程中,类对象尚未完全创建,直接引用类名会触发NameError——因为此时Utilities这个名字还没绑定到刚在构建的类对象上。
下面提供几种可行的解决思路:
方法一:类定义完成后手动赋值
这是最直接的方式,等类完全创建好再给类变量赋值:
class Utilities: # 先定义类的其他内容 pass # 类创建完成后,再绑定className变量 Utilities.className = Utilities.__name__
方法二:使用类装饰器
用装饰器在类定义完成后自动注入类变量,适合需要给多个类添加这个属性的场景:
def add_class_name(cls): cls.className = cls.__name__ return cls @add_class_name class Utilities: # 类内容 pass
方法三:使用元类
元类可以控制类的创建过程,能在类被定义时自动设置类变量,适合需要全局统一处理的场景:
class ClassNameMeta(type): def __new__(meta, name, bases, attrs): # 在类创建时,直接把类名赋值给className属性 attrs['className'] = name return super().__new__(meta, name, bases, attrs) class Utilities(metaclass=ClassNameMeta): # 类内容 pass
测试验证:
print(Utilities.className) # 输出: Utilities
内容的提问来源于stack exchange,提问作者scorpion35
相关产品推荐
相关产品推荐

