super() 함수의 구체적인 기능은 전달된 두 매개변수에 따라 다음과 같습니다.
첫 번째 매개변수로 전달된 클래스 이름에 따라 MRO에서의 현재 위치가 결정됩니다. MRO(메소드 결정 순서);
두 번째 매개변수로 전달된 self를 통해 현재 MRO 목록을 결정합니다.
def super(cls, inst): mro = inst.__class__.mro() #确定当前MRO列表 return mro[mro.index(cls) + 1] #返回下一个类
다음 코드:
class A(object): def name(self): print('name is xiaoming') #super(A,self).name()class B(object): def name(self): print('name is cat')class C(A,B): def name(self): print('name is wang') super(C,self).name()if __name__ == '__main__': c = C() print(c.__class__.__mro__) c.name()
위 코드 출력을 실행합니다. C 클래스의 super() 함수가 실행되면 실제로 A 클래스의 name 함수가 호출됩니다. super() 함수는 A에서 주석 처리되어 실행이 뒤로 계속되지 않습니다. 그리고 현재 MRO 목록 순서는 C,A,B,object로 출력됩니다.
(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)name is wang name is xiaoming
클래스 A의 주석을 제거하면 실행 코드 출력은 다음과 같습니다. A가 실행된 후에도 실행이 계속되는 것을 볼 수 있습니다. B의 name() 함수 B에 여전히 super 함수가 있으면 계속해서 object에 name() 함수가 있는지 확인합니다.
(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)name is wang name is xiaoming name is cat
Python의 super 함수 이해와 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!