python의 슈퍼()의 작용과 원리를 상세히 설명하다
오늘 우리가 소개한 주인공은 슈퍼()입니다. 클래스의 계승에서 슈퍼()는 매우 자주 사용됩니다. 이것은 하위 클래스가 상위 클래스를 호출하는 방법의 일부 문제를 해결했습니다. 상위 클래스가 여러 번 호출되었을 때 한 번만 실행하고 실행 논리를 최적화했습니다. 다음은 상세하게 보겠습니다.
예를 들어 다음과 같이 하십시오.
class Foo:
def bar(self, message):
print(message)
>>> Foo().bar("Hello, Python.")
Hello, Python.
계승 관계가 존재할 때 하위 클래스에서 부모 클래스를 호출하는 방법이 필요할 때가 있다. 이때 가장 간단한 방법은 대상 호출을 클래스 호출로 바꾸는 것이다. 주의해야 할 것은 이때 self 파라미터는 현식 전달이 필요하다. 예를 들어
class FooParent:
def bar(self, message):
print(message)
class FooChild(FooParent):
def bar(self, message):
FooParent.bar(self, message)
>>> FooChild().bar("Hello, Python.")
Hello, Python.
이렇게 하면 일부 단점이 있다. 예를 들어 부류의 이름을 수정하면 자류에서 여러 가지 수정이 관련된다. 또한Python은 다계승을 허용하는 언어이다. 상기와 같은 방법은 다계승을 할 때 여러 번 반복해서 써야 하기 때문에 군더더기가 된다.이러한 문제를 해결하기 위해 Python은 Super() 메커니즘을 도입했습니다. 예 코드는 다음과 같습니다.
class FooParent:
def bar(self, message):
print(message)
class FooChild(FooParent):
def bar(self, message):
super(FooChild, self).bar(message)
>>> FooChild().bar("Hello, Python.")
Hello, Python.
겉으로 보면 슈퍼(Foo Child, self).bar(메시지) 메서드 및 FooParent.bar(self,message) 방법의 결과는 일치한다. 실제로 이 두 가지 방법의 내부 처리 메커니즘은 크게 다르다. 다계승 상황과 관련될 때 뚜렷한 차이를 나타낸다. 예를 들어 다음과 같다.코드 1
class A:
def __init__(self):
print("Enter A")
print("Leave A")
class B(A):
def __init__(self):
print("Enter B")
A.__init__(self)
print("Leave B")
class C(A):
def __init__(self):
print("Enter C")
A.__init__(self)
print("Leave C")
class D(A):
def __init__(self):
print("Enter D")
A.__init__(self)
print("Leave D")
class E(B, C, D):
def __init__(self):
print("Enter E")
B.__init__(self)
C.__init__(self)
D.__init__(self)
print("Leave E")
E()
결과 내보내기
Enter E
Enter B
Enter A
Leave A
Leave B
Enter C
Enter A
Leave A
Leave C
Enter D
Enter A
Leave A
Leave D
Leave E
실행 순서는 이해하기 쉽다. 유일하게 주의해야 할 것은 공공 부류 A가 여러 번 실행되었다는 것이다.코드 2
class A:
def __init__(self):
print("Enter A")
print("Leave A")
class B(A):
def __init__(self):
print("Enter B")
super(B, self).__init__()
print("Leave B")
class C(A):
def __init__(self):
print("Enter C")
super(C, self).__init__()
print("Leave C")
class D(A):
def __init__(self):
print("Enter D")
super(D, self).__init__()
print("Leave D")
class E(B, C, D):
def __init__(self):
print("Enter E")
super(E, self).__init__()
print("Leave E")
E()
결과 내보내기
Enter E
Enter B
Enter C
Enter D
Enter A
Leave A
Leave D
Leave C
Leave B
Leave E
슈퍼 메커니즘에서 공공 부류는 한 번만 실행되고 실행 순서는 MRO(Method Resolution Order): 방법 해석 순서에 따라 진행된다.이상은python의super()의 작용과 원리에 대한 상세한 내용입니다.pythonsuper()에 대한 더 많은 자료는 저희 다른 관련 글에 주목하세요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.