Python: 슈퍼 당신은 몰라요
super() 사용 소개
클래스 상속에서 메서드를 재정의하면 해당 메서드가 상위 클래스의 동일한 이름의 메서드를 재정의하지만 때로는 다음과 같은 기능을 구현하기를 바랍니다. 동시에 부모 클래스의 메소드를 호출해야 합니다. 이는 super를 사용하여 달성할 수 있습니다.
class Animal(object): def __init__(self, name): self.name = name def greet(self): print 'Hello, I am %s.' % self.name class Dog(Animal): def greet(self): super(Dog, self).greet() # Python3 可使用 super().greet() print 'WangWang...'
위에서 Animal은 부모 클래스인 Dog는 하위 클래스이므로 Dog 클래스에서 반복합니다. Greeting 메서드는 부모 클래스의 기능을 동시에 구현하기 위해 부모 클래스의 메서드도 호출합니다. :
>>> dog = Dog('dog') >>> dog.greet() Hello, I am dog. WangWang..
super의 가장 일반적인 용도 중 하나는 하위 클래스에 있다고 할 수 있습니다. 다음과 같이 상위 클래스의 초기화 메서드를 호출합니다.
class Base(object): def __init__(self, a, b): self.a = a self.b = b class A(Base): def __init__(self, a, b, c): super(A, self).__init__(a, b) # Python3 可使用 super().__init__(a, b) self.c = c
super( )
위의 사용법을 읽고 나면 super의 사용법이 매우 간단하다는 것을 느낄 수 있습니다. 상위 클래스를 가져와서 상위 클래스의 메서드를 호출하는 것 외에는 아무것도 아닙니다. 실제로 위의 경우에는 super가 획득한 클래스가 우연히 부모 클래스가 되지만, 다른 경우에는 Super가 실제로 부모 클래스와 실질적인 관계가 없는 것은 아닙니다.
다중 상속과 관련된 좀 더 복잡한 예를 살펴보겠습니다.
class Base(object): def __init__(self): print "enter Base" print "leave Base" class A(Base): def __init__(self): print "enter A" super(A, self).__init__() print "leave A" class B(Base): def __init__(self): print "enter B" super(B, self).__init__() print "leave B" class C(A, B): def __init__(self): print "enter C" super(C, self).__init__() print "leave C"
그 중 Base가 상위 클래스이고 A와 B가 Base를 상속하고, C는 A, B를 상속하며, 이들의 상속 관계는 다음과 같습니다.
Base / \ / \ A B \ / \ / C
이제 사용법을 살펴보겠습니다.
>>> c = C() enter C enter A enter B enter Base leave Base leave B leave A leave C
super가 " call the method of the parent class"라고 입력하면 enter A의 다음 문장이 왜 enter Base가 아니고 enter B인지 궁금할 것입니다. 그 이유는 super가 부모 클래스와 실질적인 관계가 없기 때문입니다. 이제 super가 어떻게 작동하는지 알아 보겠습니다.
MRO 목록
실제로 정의한 각 클래스에 대해 Python은 클래스 상속 순서를 나타내는 MRO(메서드 해결 순서) 목록을 계산합니다. 다음 메서드를 사용할 수 있습니다. 특정 클래스의 MRO 목록을 얻으려면:
>>> C.mro() # or C.__mro__ or C().__class__.mro() [__main__.C, __main__.A, __main__.B, __main__.Base, object]
이 MRO 목록의 순서는 어떻게 결정됩니까? 이는 C3 선형화 알고리즘을 통해 구현됩니다. 일반적으로 클래스의 MRO 목록은 모든 상위 클래스의 MRO 목록을 병합하고 다음 세 가지 원칙을 따르는 것입니다.
하위 클래스는 항상 상위 클래스보다 앞에 있습니다. 🎜>
부모 클래스가 여러 개인 경우 목록의 순서에 따라 검사합니다.다음 클래스에 합법적인 선택이 2개인 경우 첫 번째 부모 클래스가 선택됩니다.super 원칙super는 다음과 같이 작동합니다.def super(cls, inst): mro = inst.__class__.mro() return mro[mro.index(cls) + 1]
super(C, self).__init__()
[__main__.C, __main__.A, __main__.B, __main__.Base, object]
super(A, self).__init__()

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











많은 웹 사이트 개발자는 램프 아키텍처에서 Node.js 또는 Python 서비스를 통합하는 문제에 직면 해 있습니다. 기존 램프 (Linux Apache MySQL PHP) 아키텍처 웹 사이트 요구 사항 ...

Linux 터미널에서 Python 버전을 보려고 할 때 Linux 터미널에서 Python 버전을 볼 때 권한 문제에 대한 솔루션 ... Python을 입력하십시오 ...

SCAPY 크롤러를 사용할 때 파이프 라인 영구 스토리지 파일을 작성할 수없는 이유는 무엇입니까? 토론 Data Crawler에 Scapy Crawler를 사용하는 법을 배울 때 종종 ...

Python : 모래 시계 그래픽 도면 및 입력 검증을 시작 하기이 기사는 모래 시계 그래픽 드로잉 프로그램에서 Python 초보자가 발생하는 변수 정의 문제를 해결합니다. 암호...

Python Process Pool은 클라이언트가 갇히게하는 동시 TCP 요청을 처리합니다. 네트워크 프로그래밍에 Python을 사용하는 경우 동시 TCP 요청을 효율적으로 처리하는 것이 중요합니다. ...

functools.partial in Python의 파이썬 funcTools.partial 객체의 시청 방법을 깊이 탐구하십시오 ...

Python 크로스 플랫폼 데스크톱 응용 프로그램 개발 라이브러리 선택 많은 Python 개발자가 Windows 및 Linux 시스템 모두에서 실행할 수있는 데스크탑 응용 프로그램을 개발하고자합니다 ...

많은 개발자들이 PYPI (PythonPackageIndex)에 의존합니다 ...
