2017-12-13 38 views
0

을 사용하여 부모 클래스의 기본값을 상속하는 방법은 여기에서 Python을 처음 접하고 일반 프로그래밍을 할 때 부모 클래스의 기본값을 상속 받겠다는 다음 예제가 있습니다. 두 가지 물건을 만들 수있는 방법. 멋지고 깨끗한 방법? - args와 ** kwargs로 실험하려고했지만 다른 오류가있었습니다.super()

class Person(object): 

def __init__(self, name="Jane Doe", age="30", gender="female"): 
    self.name = name 
    self.age = age 
    self.gender = gender 
    self.goal = "My goal is: Live for the moment!" 


class Student(Person): 

def __init__(self, name, age, gender, prev_org="The School of Life", skip_d=0): 
    super(Student, self).__init__(name, age, gender,) 
    self.prev_org = prev_org 
    self.skip_d = skip_d 
    self.goal = "Be a junior software developer." 

john = Student('John Doe', 20, 'male', 'BME') 

student = Student() 
+0

아마도 클래스 데코레이터를 사용하여이 작업을 수행 할 수는 있지만 다시 설계 문제가 있음을 나타냅니다. –

답변

0

나는 이것이 가능하지 않다고 생각합니다. 내가 대신 본 적이 것은이 같은 것입니다 :

class Person(object): 

    def __init__(self, name=None, age=None, gender=None): 
     if name is None: 
      name = "Jane Doe" 
     if age is None: 
      age = "30" 
     if gender is None: 
      gender = "female" 

     self.name = name 
     self.age = age 
     self.gender = gender 
     self.goal = "My goal is: Live for the moment!" 


class Student(Person): 

    def __init__(self, name=None, age=None, gender=None, prev_org="The School of Life", skip_d=0): 
     super(Student, self).__init__(name, age, gender) 
     self.prev_org = prev_org 
     self.skip_d = skip_d 
     self.goal = "Be a junior software developer." 


john = Student('John Doe', 20, 'male', 'BME') 

student = Student() 
0

당신은 *args에이를 수 있지만, 나는 그것이 훌륭한 디자인 선택 생각하지 않습니다.

class Student(Person): 

    def __init__(self, *args, prev_org="The School of Life", skip_d=0): 
     super(Student, self).__init__(*args[:2]) 

부모에 떨어져 처음 3 개 위치 인수를 전달한다 ( Person) 클래스는 너무 Student 그것에 대해 걱정할 필요가 없습니다.

john = Student('John Doe', 20, 'male', 'BME') 

그런 다음 'BME' 지금의 위치 인수하고, *args에 포함되어 있습니다 : 당신과 같이 Student의 인스턴스를 만드는 경우 때문에

당신은 목록을 ([:2])를 슬라이스 할 필요가있다. 반면 :

john = Student('John Doe', 20, 'male', prev_org='BME') 

이제 키워드 인수, 그래서 *args에 나타나지 않을 것입니다.