2017-05-29 12 views
-1

これはとてもシンプルなものだと確信していますが、私は新しいです。複数のサブクラスでクラス値をデフォルトとして使用するにはどうすればよいですか?

私はクラスを持っています。のは、私はこのコードを実行すると、私は基本的に「TypeError: __init__() missing 1 required positional argument: 'type'

を言うエラーが出る、私の目標はChildSubTypeのために、私は唯一の名前に置くために必要とすることができるということである、とあれば

class Parent: 

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

class Mix: 
    def BMethod(self): 
     return '{0} is right' 

class Child(Parent, Mix): 
    def __init__(self, name, color, type): 
     self.type = 'AAA' 
     self.color = 'None' 
     super(Child,self).__init__(name,color) 

    def __str__(self): 
     return '{0} is a {1} {2}.'.format(self.name,self.color,self.type) 

class ChildSubType(Child, Mix): 
    def __init__(self, name, color, type): 
     color = 'None' 
     kind = super().kind 
     super(ChildSubType,self).__init__(name,color,type) 

    def __str__(self): 
     return "{0} is not a {1} {2}".format(self.name,self.color.self.type) 


childsubtype = ChildSubType(
    "Name1" 
    ,"White" 
) 

print(childsubtype) 

を呼ぶことにしましょうColorまたはTypeに入れない場合は、デフォルトで色のChildSubTypeクラスの値に設定され、デフォルトではそのタイプのChildクラスに設定されます。

これを達成する方法は完全にはわかりません。

私はそれがChildSubTypeのメソッドと関係があると考えていますが、それが何をしているのかは100%明確ではありません。この時点で、私は基本的に指示に従っており、このロードブロックに衝突しました。

でも、私はでChildSubTypeを使わずに実行しようとしましたが、同じエラーが発生しました。私はちょうどクラスの中からデフォルト値を使う方法を知らないと思う。

編集: 申し訳ありませんが、私はそれが働いていると思います。コメントに示唆されているようにデフォルト値を与えるようにコードを更新しました。ここで

は私が変わっものです:

Class Child(Parent, Mix): 
    def __init__(self, name, color, **type = 'AAA'**): 
     self.type = 'AAA' 
     self.color = 'None' 
     super(Child,self).__init__(name,color) 

    def __str__(self): 
     return '{0} is a {1} {2}.'.format(self.name,self.color,self.type) 

class ChildSubType(Child, Mix): 
    def __init__(self, name, color, **type = super(type)**): 
     color = 'None' 
     kind = super().kind 
     super(ChildSubType,self).__init__(name,color,type) 
+1

を、私はあなたが理にかなってここにキーワード引数 '__init __(...、タイプ=「デフォルト」)' –

+0

を使用することができると思う...しかし、場合私はChildSubTypeでそれを明確にしていない、どのように私は子クラスからのデフォルト値を呼び出すだろうか? – phroureo

+0

デフォルトの 'type'は' super'呼び出しで渡されます。 –

答えて

3

現在のあなた__init__方法は3つの初期化変数が含まれていますが、オブジェクトを作りながら、あなただけの2を渡しています。次のように私は、デフォルト値を使用することをお勧めします:

def __init__(self, name, color='None', type=None): 
+0

実際には、組み込みの 'type'をオーバーライドしないでください – DeepSpace

関連する問題