2017-08-05 19 views
0

我想设置一些常量作为一个阶级的成员,我觉得这是错误的方式做到这一点:Python,如何在父类的init中设置常量?

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__方法返回无。当Unit实例化,而不是当我想,即当self._symbol已收到一个值时,似乎执行。

我可以通过在每个子类中有一个__init__方法使其工作,但不会干。 这是做什么的权利?

+3

不知道你要在这里做什么。为什么不让'__repr__'返回'self.SYMBOL'? –

+0

谢谢,你是对的。正如Martijn所指出的那样,整个'__init__'是无用的。 – Bastian

回答

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 

有是在设置实例属性的小点;您已经可以直接访问类属性。

相关问题