programing

Python의 상속 및 초기화 방법

padding 2023. 7. 27. 21:40
반응형

Python의 상속 및 초기화 방법

나는 파이썬의 원조야.나는 상속을 이해할 수 없고,__init__().

class Num:
    def __init__(self,num):
        self.n1 = num

class Num2(Num):
    def show(self):
        print self.n1

mynumber = Num2(8)
mynumber.show()

결과:8

이것은 괜찮습니다.하지만 난 대체합니다.Num2와 함께

class Num2(Num):
    def __init__(self,num):
        self.n2 = num*2
    def show(self):
        print self.n1,self.n2

결과:Error. Num2 has no attribute "n1".

이런 경우에, 어떻게.Num2접근n1?

첫번째 상황에서,Num2수업을 연장하고 있습니다.Num그리고 당신은 이름이 붙은 특별한 방법을 재정의하지 않기 때문입니다.__init__()Num2에서 상속됨Num.

클래스가 정의하는 경우__init__()메서드, 클래스 인스턴스화가 자동으로 호출됩니다.__init__()새로 생성된 클래스 인스턴스의 경우.

두 번째 상황에서, 당신이 다시 정의하고 있기 때문에.__init__()Num2당신은 슈퍼 클래스에 있는 사람을 명시적으로 부를 필요가 있습니다.Num해당 동작을 확장하려는 경우.

class Num2(Num):
    def __init__(self,num):
        Num.__init__(self,num)
        self.n2 = num*2

init를 재정의할 때는 부모 클래스의 init도 호출해야 합니다.

super(Num2, self).__init__(num)

__init__() 메서드를 사용한 Python super() 이해

다음과 같은 Num2 클래스의 간단한 변경 사항:

super().__init__(num) 

이것은 python3에서 작동합니다.

class Num:
        def __init__(self,num):
                self.n1 = num

class Num2(Num):
        def __init__(self,num):
                super().__init__(num)
                self.n2 = num*2
        def show(self):
                print (self.n1,self.n2)

mynumber = Num2(8)
mynumber.show()

네가 전화를 안하니까,Num.__init__필드 "n1"은 생성되지 않습니다.그것을 부르면 거기에 있을 것입니다.

이를 바탕으로 다양한 답변을 수집하고 승인된 답변으로 병합할 수 있습니까?

위의 두 개의 최신 답변에서 입력을 수집하여 위키 답변을 작성하고 있습니다.
Sacchit Jaiswal & Tom Jelen의 코드로 대답합니다.
이유 또는 마우로 로코가 필요로 하는 이유로 답변합니다.


init를 재정의할 때는 부모 클래스의 init도 호출해야 합니다.
__init__() 메서드를 사용한 Python super() 이해

super(Num2, self).__init__(num)

이것은 python3에서 작동합니다.

class Num:
        def __init__(self,num):
                self.n1 = num

class Num2(Num):
        def __init__(self,num):
                super().__init__(num)
                self.n2 = num*2
        def show(self):
                print (self.n1,self.n2)

mynumber = Num2(8)
mynumber.show()

언급URL : https://stackoverflow.com/questions/5166473/inheritance-and-init-method-in-python

반응형