2017-01-07 21 views
1

Python 3でいくつかの属性を持つParentとClildクラスがありますが、これらの属性の1つは他の属性の合計です。Python 3の子クラスの親クラスからの属性を取得する

親クラス:

class Parent: 
    ATRIBUTE1 = 'dad' 
    ATRIBUTE2 = ' good' 
    ATRIBUTE3 = ATRIBUTE1 + ATRIBUTE2 

子供クラス:

class Child(Parent): 
    ATRIBUTE1 = 'son' 
    ATRIBUTE2 = ' bad' 

私はちょうど同じプロパティを持つ子供のクラスでATRIBUTE3を継承します。

予想される出力:

>> parent.ATRIBUTE3 
'dad good' 

>> child.ATRIBUTE3 
'son bad' 

答えて

2

あなたがプロパティを必要としています。

class Parent: 
    ATRIBUTE1 = 'dad' 
    ATRIBUTE2 = ' good' 

    @property 
    def attribute3(self): 
     return self.ATRIBUTE1 + self.ATRIBUTE2 

parent.attribute3child.attribute3は、あなたが望む結果が得られます。

+1

しかし、それは可能性がありクラス変数として 'Child.attribute3'としてアクセスしないでください –

+0

ありがとう!それは動作します! – Gui

1

ATTRIBUTE3は、クラス作成時に評価され、アクセスごとに再計算されません。したがって、あなたは数式ではなく親の値を継承します。

あなたはアクセスごとに再計算された属性値を希望する場合は、@propertyを使用することができます。

class Parent: 
    ATRIBUTE1 = 'dad' 
    ATRIBUTE2 = ' good' 

    @property 
    def ATRIBUTE3(self): 
     return self.ATRIBUTE1 + self.ATRIBUTE2 

そして(読み取り専用が)あなたは以前とそれを同じようにアクセスできます。

print(child.ATTRIBUTE3) 
関連する問題