2017-12-29 63 views
2

두 클래스가 있습니다. Parent 클래스에는 몇 가지 기본값이 있습니다. Child 클래스가 Parent 클래스의 init() 메서드와 기본값을 상속 받기를 바랍니다.파이썬에서 상속 클래스의 기본값

그러나 선택적 인수의 값을 변경하려고하면 할 수 없습니다. 예를 들어 아래 코드에서 year_born의 값을 변경할 수 없습니다.

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 

기본값을 사용하여 부모 클래스의 인스턴스를 만들면 출력이 정상입니다. 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

음이, 당신이 '슈퍼라는() .__ 초기화 __ (물건, year_born = 1900, ...)'. 너는 무엇을 기대 했는가 ?? – ForceBru

+2

'super' 호출이 잘못되었습니다. –

+0

감사합니다. @ pm-2ring __init __ (자기 이름, 성, 형제 = 0, 년령 = 1900, 나이 = get_age) __init __ (자기 이름, 성, 형제 = 0, 성년, 형제, 나이 = 하위 항목에 기본값 ( )이 있어야하지만 super() .__ init___이 포함되어 있지 않아야합니다. – user3177938

답변

3

변경 하위 클래스에서이 라인 :

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

감사합니다. 이제는 기본값이 super() .__ init__ 함수 의 호출에서 작동하지 않아야한다는 것을 알게되었습니다. 감사합니다 – user3177938

+0

당신은 오신 것을 환영합니다. – lpozo