2016-12-19 25 views
-4

私は既定値を持つ親クラスを持っています。それ以外のオブジェクトはすべて継承します。親クラスから子クラスへ継承する値

class Parent(): 
    def __init__(self, a, b, x, y): 
     self.a = a 
     self.b = b 
     self.x = x 
     self.y = y 

class Child(Parent): 
    def __init__(self, a, b, x, y): 
     super().__init__(self, a, b) 
     self.x = x 
     self.y = y 

は私がParentしたいとChildは同じabを持っています。だから私はすべての時間を書きたくない:

v = Child(a,b,x,y) 

しかし:

v = Child(x,y) 
+0

あなたがそれらを渡さないと、あなたはどんなことを期待しますか? Pythonは単に乱数や文字列またはオブジェクトを選択することになっていますか? –

+2

継承を行うときに、親子関係はありません。 'Dog'クラスと' Poodle'サブクラスがある場合、 'Poodle'は' Dog'の子ではありません。 –

+0

あなたの 'a'と' b'(そして 'x'、' y'と 'z'も)属性はクラスに属しませんが、クラスの_instances_に属します。そして子供は同じaとbを持つ」)は意味をなさない。 –

答えて

2

私はあなたが複数のParent()のインスタンスを持っていて、使用してChild()インスタンスを作成することでしょう仮定するつもりですのいずれかのデフォルト。

あなたが親にファクトリメソッドを作成することができます。

class Parent(): 
    def __init__(self, a, b, x, y): 
     self.a = a 
     self.b = b 
     self.x = x 
     self.y = y 

    def create_child(self, x, y): 
     return Child(self.a, self.b, x, y) 

child = parent.create_child(x, y) 

またはChildにファクトリクラスメソッド与える:

class Child(Parent): 
    @classmethod 
    def from_parent(cls, parent, x, y): 
     return cls(parent.a, parent.b, x, y) 

をして、それを使用します。

child = Child.from_parent(parent, x, y) 

は方法を選択しますアルゴリズムがどのように子ノードを生成する必要があるかに最も適しています。後者のアプローチの

デモ:

>>> parent = Parent('foo', 'bar', 10, 20) 
>>> child = Child.from_parent(parent, 52, 1) 
>>> vars(child) 
{'a': 'foo', 'b': 'bar', 'x': 52, 'y': 1} 
+0

classmethodが機能していません。 –

+0

@MarkoBerger:「働かない」とは何も言わない。例外はありますか?それは間違った結果を返していますか?何? –

+0

from_parent()あなたは4つの引数を持っています。あなたはそれらを呼び出すと3つしか渡しません。したがって、エラーを受け取りました –

0

たぶん、あなたはその後、クラス変数を使用したいですか?

class Parent(): 
    a = 2 
    b = 3 
    def __init__(self, x, y): 
     self.x = x 
     self.y = y 

class Child(Parent): 
    pass 

v = Child(x,y) 
-1

クラスParentは、属性abのデフォルト値を持っていないようです。クラス変数を使用してコードにこのマイナーな変更を行うことをお勧めします。

class Parent(): 
    a = 'foo' 
    b = 'bar' 
    def __init__(self, x, y): 
     self.x = x 
     self.y = y 

class Child(Parent): 
    def __init__(self, x, y): 
     self.x = x 
     self.y = y 
関連する問題