2017-12-24 7 views
1

たくさん入力せずにスーパークラスのインスタンスを使用してサブクラスを定義するにはどうすればよいですか?参照:より少ないキーストロークでサブクラス化

class A(): 
    def __init__(self,x,y): 
     self.x=x 
     self.y=y 

class B(A): 
    def __init__(self,x,y,z): 
     A.__init__(A,x,y) 
     self.z=z 

class1=A(2,3) 
class2=B(class1.x,class1.y,5) # Is there something easier than this, where I don't have to type class1.x, class1.y and 
           # I can just pass all the data members of class1 at once? 
+0

あの、 'クラス2 = B(2,3,5)'? –

+0

xやy、z..foobar、quxxなどの文字列があれば、シーケンスなどを使用している可能性があります。kwargsもパスとして使用されることがあります(明快さと直接的に結合されたパラメータを犠牲にして)、それはどのようにうまくいくように見えますか? – user2864740

+0

この具体例では、 'A'のインスタンスを' B .__ init __() 'に渡すことができます。 –

答えて

0
class A(object): 
    def __init__(self,x,y): 
     self.x=x 
     self.y=y 

class B(A): 
    def __init__(self,a,z): 
     self.a=a 
     self.z=z 

class1=A(2,3) 
class2=B(class1,5) 
+0

これは継承ではなく*擬似*合成であり、 'x'と' y'プロパティを出すBに対して呼び出されるメソッドAをブレークします。クラスB *がAを拡張しなかった場合、特にAの初期化子が呼び出されないので、混乱が少なくなります(つまり完全な構成)。 – user2864740

+0

Bのメソッドは、self.xの代わりにself.a.xを使うように変更する必要があります。 –

+0

何か不足していますか?確かにAの初期化子は 'class1 = A(2,3)'と呼ばれています –

関連する問題