2017-12-29 50 views
2

私は2つのクラスを持っています。親クラスにはいくつかのデフォルト値があります。 私はChildクラスがParentクラスのinit()メソッドとデフォルト値を継承したいと思います。Pythonの継承クラスのデフォルト値

しかし、オプションの引数の値を変更しようとすると、できません。 たとえば、以下のコードでは、年の値を変更することはできません

def get_current_age(x): 
    return 2017-x 
get_age = get_current_age 

class Parent(): 
    def __init__(self,name,last_name, siblings=0, year_born=1900, age=get_age): 
     self.name = name 
     self.last_name = last_name 
     self.siblings = siblings 
     self.year_born=year_born 
     self._get_age = get_age(self.year_born) 

class Child(Parent): 
    def __init__(self,name,last_name, siblings=0, year_born=1900, age=get_age): 
     super().__init__(name,last_name, siblings=0, year_born=1900, age=get_age) 
     self.lives_with_parent= True 
     self.stil_in_school= None 

デフォルト値でParentクラスのインスタンスを作成すると、出力はokです。 ageの値が異なるChildインスタンスを作成すると、デフォルト値が引き続き使用されます。

Dad=Parent('Fyodr','Dosto') 
print('Dad is' ,Dad._get_age) 

kid = Child('Joseph','Dosto', year_born=2000) 
print('Kid is' ,kid._get_age) 

Dad is 117 
Kid is 117 

これを修正する方法や、より良い方法で書く方法が他にあるかどうかわかりません。 多くのおかげで、

+1

はさて、あなたは ''スーパー().__のinit __(もの、year_born = 1900、...)と呼ばれます。あなたは何を期待しましたか? – ForceBru

+2

'super'呼び出しが間違っています。 –

+0

ありがとう@ pm-2ring __init __(自己、名前、姓、兄弟= 0、年齢= 1900、年齢= get_age)__init __(自己、名前、姓、兄弟= 0、年齢= get_age)子プロセスのデフォルト値は ですが、super().__ init___は含まれていませんか? – user3177938

答えて

3

変更は、子クラスでこの行:

super().__init__(name,last_name, siblings, year_born, age=get_age) 
+0

ありがとう、それは動作します。私は今、super().__ init__関数 の呼び出しではデフォルトではないはずですが、定義だけであることがわかります。ありがとうございます – user3177938

+0

あなたは歓迎します。 – lpozo