2017-08-05 17 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__メソッドはNoneを返します。それはUnitがインスタンス化しているときに実行していると思われます。つまり、self._symbolが値を受け取ったときです。

それぞれの子クラスに__init__メソッドを持つことで動作させることができますが、それはDRYではありません。 これを行う権利は何ですか?

+3

ここで何をしようとしているのかよく分かりません。 'self.SYMBOL'を返すために' __repr__'を取得してみませんか? –

+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 

インスタンスの属性を設定するにはほとんどのポイントがあります。クラス属性に直接アクセスできます。

関連する問題