programing

하위 클래스에서 기본 클래스의 __init_ 메서드를 호출하는 방법은 무엇입니까?

abcjava 2023. 7. 20. 21:39
반응형

하위 클래스에서 기본 클래스의 __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

반응형