IT

__init__ 메서드를 호출하는 방법은 무엇입니까?

lottoking 2020. 9. 16. 07:59
반응형

__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'}

Mingyu가 지적했듯이 형식화에 문제가 있습니다. 그 외에는 Derived 클래스의 이름 을 호출하는 동안 사용하지 않는 것이 좋습니다. 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__super ()와 함께 사용하는 문제를 지적한 Erwin Mayer에게 감사드립니다.


다음과 같이 슈퍼 클래스의 생성자를 호출 할 수 있습니다.

class A(object):
    def __init__(self, number):
        print "parent", number

class B(A):
    def __init__(self):
        super(B, self).__init__(5)

b = B()

노트:

이것은 부모 클래스가 상속 할 때만 작동합니다. object


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를 호출하지 마십시오 .

참고 URL : https://stackoverflow.com/questions/19205916/how-to-call-base-classs-init-method-from-the-child-class

반응형