[Python 초보자] __new__ 메소드의 기능에 대해 질문하세요
phpcn_u1582
phpcn_u1582 2017-06-28 09:24:55
0
1
631

코드 A:

으아악

코드 실행 결과:

코드 B:

으아악

코드 B 실행 결과:

코드 C:

으아악

코드 C 실행 결과:

내 질문 1:
이 세 가지 코드 A, B, C는 왜 서로 다른 결과를 출력합니까? 원리는 무엇입니까? 특히 코드 B와 코드 C는 왜 코드 C가 B를 기반으로 리턴을 추가하고 결과는 B보다 하나 더 많은 init 메소드입니까?
내 질문 2:
메서드에 매개변수를 전달할 때 self와 cls 두 매개변수의 차이점은 무엇인가요? __new__ 메소드에 cls가 매개변수로 필요하고 __init__ 메소드에 self가 필요한 이유는 무엇입니까?

phpcn_u1582
phpcn_u1582

모든 응답(1)
过去多啦不再A梦

먼저 한 가지를 이해해야 합니다. selfcls的区别, cls是代表这个类, slef是用来代表这个类的实例이것을 이해하면 성공할 수 있습니다.

함수 매개변수 self는 인스턴스 메서드이고 인스턴스에 바인딩된 이 함수로 이해될 수 있습니다.

__new__方法, 是新式类用来创建实例使用的, 传入的cls就是用来给object.__new__创建实例使用的参数, 如果没有传入cls, object어떤 종류의 인스턴스를 생성해야 할지 전혀 모르겠습니다.

위 내용과 결합하여 출력이 다른 세 가지 이유에 대해 이야기해 보겠습니다.

  1. 왜 --new만 사용하나요? 왜냐하면 모든 클래스는 객체를 인스턴스화할 때 이것을 호출해야 하기 때문입니다__new__方法, 去创建实例, 所以它肯定会被调用, 但是因为该函数被你重写了, 所以它只是打印了--new方法, 并没有返回创建实例, 并且放回, 所以__del__그것도 일어나지 않을 것입니다

  2. 1번에서 언급한 것처럼 --new와 --del만 있는 이유는 바로 여기에 있습니다 __new___有创建新实例, 但是并没有返回, 因为只有返回了, 该对象才能进行下一步的__init__ 정확히는 생성만 있고 반환은 없기 때문에 결과는 이렇습니다

  3. 처음 두 가지 점을 이해하셨다면 생성되어 반환되므로 '__init__'도 실행되고 모든 것이 정상적인 동작으로 발생하므로 문제가 없을 것이라고 생각합니다

마지막으로 설명드리고 싶은 점은: 왜 __del__会被执行, 理论上, 这个只有在实例被del析构时, 才会执行,这里并没有del xtq类似的代码, 为什么也会执行, 原因就是, 程序结束了, 要退出了, 在执行更底层的程序退出时, python 자발적인 메모리 재활용으로 모든 것이 먼지로 돌아가고 생성된 객체도 하나씩 파괴되는가

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿