2017-10-30 22 views
0
class Wolf: 
    def __init__(self, legs): 
     self.legs = 4 
class Dog(Wolf): 
    def __init__(self, color): 
     self.color = color 
fido = Dog(legs = 4, color = "brown") 

これはエラーメッセージを吐き出します。スーパークラスに関係しないサブクラスにパラメータを追加する場合、どうすればよいでしょうか。Python 3のサブクラスに引数を追加する方法

+0

あなたは、ウルフの 'init'に引数リストに' ** kwargs'を追加することができます( 'legs'の後)、' Wolf'は引数を取ることができますが、何もしません。 – numbermaniac

答えて

0

あなたはまだDogのために足の引数に渡す必要があり、その後、super使用します。ここでは

class Wolf: 
    def __init__(self, legs): 
     self.legs = 4 
class Dog(Wolf): 
    def __init__(self, legs, color): 
     super().__init__(legs) 
     self.color = color 
fido = Dog(legs=4, color="brown") 
1

が、これは試してみてくださいこれをする。このチュートリアルからこの同様の例のように、親クラスののinit関数を呼び出す必要があります:

継承の仕組みではありません
class Pet(object): 

    def __init__(self, name, species): 
     self.name = name 
     self.species = species 

    def getName(self): 
     return self.name 

    def getSpecies(self): 
     return self.species 

    def __str__(self): 
     return "%s is a %s" % (self.name, self.species) 


class Dog(Pet): 

    def __init__(self, name, chases_cats): 
     Pet.__init__(self, name, "Dog") 
     self.chases_cats = chases_cats 

    def chasesCats(self): 
     return self.chases_cats 
0

継承を説明し、方法を示しtutorialからの例です:

class Wolf: 
    def __init__(self, legs): 
     self.legs = 4 
class Dog(Wolf): 
    def __init__(self, color, legs): 
     super().__init__(legs) 
     self.color = color 
fido = Dog(legs = 4, color = "brown") 
0

。別のクラスから継承すると、スーパークラスのパラメータは自動的にサブクラスのパラメータリストに追加されません。あなたは明示的にサブクラスのコンストラクタで必要なパラメータを受け入れ、スーパークラスのコンストラクタへのそれらを渡す必要があります。

class Wolf: 
    def __init__(self, legs): 
     self.legs = 4 

class Dog(Wolf): 
    def __init__(self, color, legs): 
     super().__init__(legs) 
     self.color = color 

fido = Dog(legs = 4, color = "brown")