2017-08-05 36 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 

有是在設置實例屬性的小點;您已經可以直接訪問類屬性。

相關問題