Python类构造函数中使用常量报错,寻求合规解决方案
解决Python类构造函数中使用类常量的错误
嘿,我太懂你这种卡一上午的憋屈感了——你遇到的问题本质是类定义还没完全完成时,Python找不到你定义的类常量。
你想啊,Python解析类代码是有顺序的:先处理类体里的常量(SLOW、MEDIUM这些),然后才会去解析__init__方法。但在__init__的参数默认值里直接写SLOW时,类Fan还没完全创建出来,Python根本不知道这个名字指向啥,自然就报错了。
修复方案超简单:给常量加类名前缀
把__init__里的默认参数从SLOW改成Fan.SLOW就行,这样Python就能明确找到类级别的常量了。修改后的完整代码如下:
class Fan: SLOW = 1 MEDIUM = 2 FAST = 3 def __init__(self, speed=Fan.SLOW, radius=5, color='blue', on=False): self.__speed = speed self.__on = on self.__radius = radius self.__color = color def getSpeed(self): return self.__speed # 可以继续补充你的其他getter/setter方法 def getRadius(self): return self.__radius def getColor(self): return self.__color def isOn(self): return self.__on
额外小技巧
如果在类的其他实例方法里要引用这些常量,除了用Fan.SLOW,还可以用self.__class__.SLOW——这样如果后续有子类继承Fan并修改常量值,代码能自动适配子类的常量,灵活性更高。
改完之后,你就不用再在getter里写繁琐的if/else了,直接用类常量初始化和访问属性完全符合要求~
内容的提问来源于stack exchange,提问作者Daniel Miller




