Python,如何在父类的init中设置常量?

时间:2017-08-05 16:36:44

标签: python

我想将一些常量设置为类的成员,我觉得这是错误的方法:

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__方法来实现它,但这不会是干的。 有什么权利去做?

1 个答案:

答案 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

设置实例属性没什么意义;您已经可以直接访问类属性。