2017-10-29 10 views
2

말은 여러 개의 매개 변수 인수 추상 클래스 Animal가 있고, 나는 Animal의 모든 속성과 서브 클래스 Dog를 만들려하지만, race의 추가 속성. 지금까지 내가이 일을하는 유일한 방법을 알고 :하위 클래스의 모든 수퍼 클래스 생성자 매개 변수를 다시 작성하지 않아도됩니까? 예를 들어

from abc import ABC 

class Animal(ABC): 
    def __init__(self, name, id, weight): 
     self.name = name 
     self.id = id 
     self.weight = weight 

class Dog(Animal): 
    def __init__(self, name, id, weight, race) # Only difference is race 
     self.race = race 
     super().__init__(name, id, weight) 

는 생성자 'Dog 내에서 생성자 매개 변수'Animal의 모든 중복 포함하지 않는이 일 수있는 방법이 있나요? 코드를 반복적으로 보이게 할뿐만 아니라 많은 매개 변수가있을 때 이것은 상당히 지루할 수 있습니다.

답변

4

당신은 포괄 인수, *args**kwargs 사용하고 부모에 사람들을 전달할 수 :

Dog('mongrel', 'Fido', 42, 81) 
:

class Dog(Animal): 
    def __init__(self, race, *args, **kwargs): 
     self.race = race 
     super().__init__(*args, **kwargs) 

이 전면에 추가 위치 인수를 넣을 것을 요구 않습니다

전화를 걸 때 각 인수의 이름을 명시 할 수 있으며 더 이상 중요하지 않은 순서는 다음과 같습니다.

Dog(name='Fido', id=42, weight=81, race='mongrel') 
+0

감사합니다. 나는 catch-all 매개 변수를 사용하면 선택 사항이되어 "race"만있는 Dog를 만들 수 있다고 생각했지만 supers __init__을 호출하면 예외가 발생합니다. (6 분 내에 수락합니다) –