Python类能否拥有自身类型的类变量?正确实现方式咨询
问题解答
你这种在类定义完成后再给类变量赋值的方式完全正确,而且是Python里处理这类场景的常规做法之一。
为什么类内部直接定义会报错
在Python定义类的过程中,类体是按顺序执行的,但此时XY类对象还没有被创建出来,所以在类内部写Origin = XY(0,0)时,解释器找不到XY这个名字,自然会抛出NameError。
你的实现方式的合理性
等整个类的定义代码执行完毕,XY类对象已经存在了,这时候再通过XY.Origin = XY(0,0)赋值,就完全没问题,这个类变量会被所有XY的实例共享,符合你的需求。
补充两种可选实现方式
如果想把赋值逻辑放在类内部,也可以用下面两种方法:
- 利用类装饰器
def add_origin(cls): cls.Origin = cls(0, 0) return cls @add_origin class XY: def __init__(self, x, y): self.x = x self.y = y
- 在
__init_subclass__里赋值
class XY: def __init__(self, x, y): self.x = x self.y = y def __init_subclass__(cls): cls.Origin = cls(0, 0)
不过这两种方法本质上和你原来的做法逻辑一致,只是把赋值时机放在了类定义完成的钩子阶段而已。
内容的提问来源于stack exchange,提问作者sds
相关产品推荐
相关产品推荐

