반응형
__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를 호출하지 마십시오 .
반응형
'IT' 카테고리의 다른 글
C # : 생성자와 인스턴스화를 통해 속성에 데이터 할당 (0) | 2020.09.16 |
---|---|
Java에서 날짜를 만드는 올바른 방법은 무엇입니까? (0) | 2020.09.16 |
OS X에 가장 비용 체계 또는 LISP 구현은 무엇입니까? (0) | 2020.09.16 |
PHP cURL HTTP 코드 반환 0 (0) | 2020.09.16 |
enumerateObjectsUsingBlock : 사용되는 BOOL * stop 인수는 무엇입니까? (0) | 2020.09.16 |