>source

아래 code의 스크린샷을 참조하세요. code 블록에서 클래스 정의 부분에서 볼 수 있습니다.레스넷의 하위 클래스입니다.nn.모듈, 그리고 우리가 정의할 때__초기화__함수, 우리는 여전히 호출슈퍼().__초기화__(). 나는 그것에 대해 정말 혼란 스럽습니다. 이미 스택 오버플로를 보았지만 수락 답변이 너무 짧아서 이해할 수 없습니다 (예를 들어,슈퍼().__초기화__()python이 내부에 통합하지 않는 이유는 항상 호출되어야 합니다.__초기화__()), 몇 가지 예를 들어 설명을 더 쉽게 이해할 수 있기를 바랍니다.

상위 클래스의 __init__ code를 실행하려면 super().__init__를 호출합니다. 상위 클래스의 __init__ code를 실행하지 않으려면 super().__init__를 호출하지 마십시오.

timgeb2022-02-05 23:15:15

"항상 호출해야 합니다" <--아니요. 원하는 경우에만 호출하면 됩니다. 어떤 이유로 동일한 클래스가 필요하지만 다른 초기화가 필요한 경우 수퍼를 호출하지 않습니다. btw 클래스의 모든 메서드도 마찬가지입니다. 또한 "암시적보다 명시적" 파이썬 관용구와 관련이 있습니다.

JustLudo2022-02-05 23:15:15
  • 답변 # 1

    Python super() 메서드를 사용하면 자식 클래스 내에서 부모 클래스의 메서드에 액세스할 수 있습니다. 즉, 이것은 다른 클래스에서 상속된 자식 클래스에서 작업하는 경우에만 작동합니다. 이렇게 하면 code의 반복을 줄이는 데 도움이 됩니다. super()는 인수를 허용하지 않습니다.

    class Parent():
      def __init__(self, name):
        self.hair= 'blonde'
        self.full_name= name + ' kurt'
    class Child(Parent):
      def __init__(self, brand):
        super().__init__('franz')
        print(self.fullname) # franz kurt
        # inherited blonde but the phenotype of the hair in child is different
        # so the attribute was overwrited
        self.hair= 'dark hair'
    

    Python과 같은 객체 지향 프로그래밍 언어의 핵심 기능 중 하나는 상속입니다. 상속은 새 클래스가 다른 클래스의 code를 사용하여 새 클래스를 만드는 경우입니다.

    클래스를 상속할 때 부모 클래스에서 메서드에 대한 액세스 권한을 얻고 싶을 수 있습니다. 바로 여기에서 super() 함수가 등장합니다.

    참조: https://realpython.com/python-super/

  • 이전 Flutter Bloc Pattern -클래스 이벤트를 생성하는 클래스 생성
  • 다음 python : 2세트의 나머지 수를 구하세요(모두!)