我想将一些常量设置为类的成员,我觉得这是错误的方法:
class Unit:
def __init__(self, SYMBOL=None, RATIO_TO_METER=None):
self._symbol = SYMBOL
self._ratio_to_meter = RATIO_TO_METER
def __repr__(self):
return self._symbol
class Inch(Unit):
SYMBOL = 'in'
RATIO_TO_METER = 0.0254
class Metre(Unit):
SYMBOL = 'm'
RATIO_TO_METER = 1
class Yard(Unit):
SYMBOL = 'yd'
RATIO_TO_METER = 0.9144
例如,__repr__
方法返回None。它似乎在Unit
实例化时执行,而不是在我想要的时候执行,即当self._symbol
收到值时。
我可以通过在每个子类中使用__init__
方法来实现它,但这不会是干的。
有什么权利去做?
答案 0 :(得分:6)
您已经设置了类属性,无需将它们传递到__init__
。只需直接使用类属性:
class Unit:
SYMBOL = None
RATIO_TO_METER = None
def __repr__(self):
return self.SYMBOL
class Inch(Unit):
SYMBOL = 'in'
RATIO_TO_METER = 0.0254
class Metre(Unit):
SYMBOL = 'm'
RATIO_TO_METER = 1
class Yard(Unit):
SYMBOL = 'yd'
RATIO_TO_METER = 0.9144
设置实例属性没什么意义;您已经可以直接访问类属性。