2017-03-02 10 views
1

申し訳ありませんが、私はそれだけでなく、それを説明していないが、私は自分のベストを尽くすよ場合:Pythonの継承変数

だから私は、親クラスから変数を継承したいが、私はしたくありません私はそれが冗長だと思うので、Childクラスのインスタンスを作成するときにそれらを再度渡します。私はちょうど親からの目の色を使用したいと思う。

class Parent: 
    def __init__(self, eye_color, length): 
     self.eye_color = str(eye_color) 
     self.length = length 


class Child(Parent): 
    def __init__(self, gender, eye_color, length): 
     super().__init__(eye_color, length) 
     self.gender = str(gender) 

x = Parent("Blue", 2) 
y = Child("Men", "Blue", 2) 

print(x.eye_color, x.length) 
print(y.gender, x.length) 

これは私が何とかしたいものです::

class Parent: 
    def __init__(self, eye_color, length): 
     self.eye_color = str(eye_color) 
     self.length = length 


class Child(Parent): 
    def __init__(self, gender): 
     super().__init__(eye_color, length) 
     self.gender = str(gender) 

x = Parent("Blue", 2) 
y = Child("Men") 

print(x.length, x.eye_color) 
print(y.gender, x.length) 
+0

は、あなたが欲しいものを得ることができません。しかし、あなたは '* args、** kwargs'を使ってほぼそこに行くことができます。 – wim

+2

'eye_color'と' length'はクラス全体ではなく 'Parent'の*インスタンス*に特有です。 'x1 = Parent(" Blue "、2)' '' x2 = Parent( "Green"、3) '' y = Child( "Men") 'が与えられた場合、' 'y.eye_color' 'y.length'は?最低でも、 'Child .__ init__'は引数として' Parent'インスタンスを取る必要があります。 – chepner

+0

親の特性を持つ 'Child'クラスのインスタンスを返す' Parent'クラスに 'create_child'メソッドを作成することができます。だからあなたは 'y = x.create_child()'のように使うことができます –

答えて

1

あなたはChild初期化子にParentインスタンスを渡す試みることができる。これは、どのような作品で私が何を意味するかについて

以下のコード例を参照してください。 ...それはおそらくあなたが得る最も近いでしょう。あなたが尋ねることは意味がありません

global last_parent 

class Parent: 
     def __init__(self, eye_color, length): 
      self.eye_color = str(eye_color) 
      self.length = length 
      last_parent = self 


class Child(Parent): 
    def __init__(self, gender): 
     super().__init__(last_parent.eye_color, last_parent.length) 
     self.gender = str(gender) 

x = Parent("Blue", 2) 
y = Child("Men") 

print(x.length, x.eye_color) 
print(y.gender, x.length) 
+0

あなたのソリューションは非常に役に立ちます!私はこのアプローチで行くつもりだと思う。 – stickfigure4

1

:子で

class Parent: 
    def __init__(self, eye_color, length): 
     self.eye_color = str(eye_color) 
     self.length = length 


class Child(Parent): 
    def __init__(self, gender): 
     super().__init__(eye_color, length) 
     self.gender = str(gender) 

x = Parent("Blue", 2) 
y = Child("Men") 

print(x.length, x.eye_color) 
print(y.gender, x.length) 

、パラメータeye_colorと長さから来るあなたができる

class Parent: 
    def __init__(self, eye_color, length): 
     self.eye_color = str(eye_color) 
     self.length = length 


class Child(Parent): 
    def __init__(self, gender, parent): 
     super().__init__(parent.eye_color, parent.length) 
     self.gender = str(gender) 

x = Parent("Blue", 2) 
y = Child("Men", x) 

print(x.length, x.eye_color) 
print(y.gender, x.length) 

もう一つは、last_parent変数を保持していますどこにもない。

rassar親オブジェクトを再利用する場合は、この例が適しています。

はまた、次の操作を行うことができます

class Parent: 
    # def __init__(self, eye_color=(default value here), length=(default value here)): 
    def __init__(self, eye_color="", length=0): 
     self.eye_color = str(eye_color) 
     self.length = length 

OR

class Parent: 
    def __init__(self, eye_color, length): 
     self.eye_color = str(eye_color) 
     self.length = length 

class Child(Parent): 
    def __init__(self, gender, *args, **kwargs): 
     super().__init__(*args, **kwargs) 
     self.gender = str(gender) 

x = Parent("Blue", 2) 
y = Child("Men") # Work with first example of Parent 
y = Child("Men", eye_color="Blue", length=2) # Work with first 
y = Child("Men", "Blue", 2) # Work with second example 

print(x.length, x.eye_color) 
print(y.gender, x.length) 
+0

これは本当に役に立ちますが、私はrassarソリューションが優れたアプローチだと思っています。とにかく私はコーディングを試みて、何が最善のものかを見ていきます。 – stickfigure4

+0

公正であるために、多分OPの質問は意味をなさないが、これはC++の何かの継承が行うため、この解決策を正確に探しているこのページを見つけた。 – ApplePie