이 질문에는 이미 답변이 있습니다.
파이썬 클래스가있는 경우 :
class BaseClass(object):
#code and the init function of the base class
그리고 나서 다음과 같은 하위 클래스를 정의합니다.
class ChildClass(BaseClass):
#here I want to call the init function of the base class
기본 클래스의 init 함수가 자식 클래스의 init 함수 인수로 가져 오는 인수를 사용하는 경우이 인수를 기본 클래스에 전달하는 방법은 무엇입니까?
내가 작성한 코드는 다음과 같습니다.
class Car(object):
condition = "new"
def __init__(self, model, color, mpg):
self.model = model
self.color = color
self.mpg = mpg
class ElectricCar(Car):
def __init__(self, battery_type, model, color, mpg):
self.battery_type=battery_type
super(ElectricCar, self).__init__(model, color, mpg)
내가 어디로 잘못 가고 있니?
너는 사용할 수있어.super(ChildClass, self).__init__()
class BaseClass(object):
def __init__(self, *args, **kwargs):
pass
class ChildClass(BaseClass):
def __init__(self, *args, **kwargs):
super(ChildClass, self).__init__(*args, **kwargs)
들여 쓰기가 잘못되었습니다. 수정 된 코드는 다음과 같습니다.
class Car(object):
condition = "new"
def __init__(self, model, color, mpg):
self.model = model
self.color = color
self.mpg = mpg
class ElectricCar(Car):
def __init__(self, battery_type, model, color, mpg):
self.battery_type=battery_type
super(ElectricCar, self).__init__(model, color, mpg)
car = ElectricCar('battery', 'ford', 'golden', 10)
print car.__dict__
결과는 다음과 같습니다.
{'color': 'golden', 'mpg': 10, 'model': 'ford', 'battery_type': 'battery'}
Mingyu가 지적했듯이 서식을 지정하는 데 문제가 있습니다. 그것 이외에, 나는 강력히 추천 할 것이다.파생 클래스의 이름을 사용하지 않습니다.전화하는 동안super()
코드가 유연하지 못하기 때문에 (코드 유지 관리 및 상속 문제). Python 3에서 사용super().__init__
대신. 다음은 이러한 변경 사항을 통합 한 후의 코드입니다.
class Car(object):
condition = "new"
def __init__(self, model, color, mpg):
self.model = model
self.color = color
self.mpg = mpg
class ElectricCar(Car):
def __init__(self, battery_type, model, color, mpg):
self.battery_type=battery_type
super().__init__(model, color, mpg)
Erwin Mayer가이 문제를 지적 해 주신 덕분에__class__
super ()
수퍼 클래스의 생성자를 다음과 같이 호출 할 수 있습니다.
class A(object):
def __init__(self, number):
print "parent", number
class B(A):
def __init__(self):
super(B, self).__init__(5)
b = B()
노트:
부모 클래스가 상속 할 때만 작동합니다.object
파이썬 3을 사용한다면, 인자없이 간단히 super ()를 호출하는 것이 좋습니다 :
class Car(object):
condition = "new"
def __init__(self, model, color, mpg):
self.model = model
self.color = color
self.mpg = mpg
class ElectricCar(Car):
def __init__(self, battery_type, model, color, mpg):
self.battery_type=battery_type
super().__init__(model, color, mpg)
car = ElectricCar('battery', 'ford', 'golden', 10)
print car.__dict__
슈퍼와 통화하지 마세요.수업에 따라 무한 재귀 예외가 발생할 수 있으므로이 대답.