하위 클래스에서 기본 클래스의 __init_ 메서드를 호출하는 방법은 무엇입니까?
파이썬 클래스가 다음과 같은 경우:
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'}
민규가 지적했듯이 포맷에 문제가 있습니다.그 외에는 전화할 때 파생 클래스의 이름을 사용하지 않는 것이 좋습니다.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)
사용에 있어 문제를 지적해 준 어윈 메이어에게 감사합니다.__class__
대단히
Python 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__
이 답변에 따라 무한 재귀 예외가 발생할 수 있으므로 super with class를 호출하지 마십시오.
슈퍼 클래스의 시공자를 이렇게 부를 수 있습니다.
class A(object):
def __init__(self, number):
print "parent", number
class B(A):
def __init__(self):
super(B, self).__init__(5)
b = B()
참고:
상위 클래스가 상속되는 경우에만 작동합니다.object
언급URL : https://stackoverflow.com/questions/19205916/how-to-call-base-classs-init-method-from-the-child-class
'programing' 카테고리의 다른 글
자바스크립트에서 동등한 Python Pandas (0) | 2023.07.20 |
---|---|
오류: 함수 detect MultiScale의 (-215) !empty() (0) | 2023.07.20 |
Excel이 프로그래밍 방식으로 인스턴스화될 때 추가 기능 로드 (0) | 2023.07.20 |
플라스크-SQLAChemy 가져오기/컨텍스트 문제 (0) | 2023.07.20 |
연결의 유효성을 검사하지 못했습니다(이 연결이 닫혔습니다.).더 짧은 maxLifetime 값을 사용하는 것을 고려할 수 있습니다. (0) | 2023.07.20 |