コード A:
リーリー コード A の実行結果:
コード B:
リーリー コード B の実行結果:
コード C:
リーリーコード C の実行結果:
私の質問 1:
これら 3 つのコード A、B、C が異なる出力結果を生成するのはなぜですか?その原理は何ですか?特にコード B とコード C ですが、なぜコード C は B に基づいて return を追加し、結果として init メソッドが B よりも 1 つ多くなるのでしょう。
私の質問 2:
メソッドにパラメータを渡すときの 2 つのパラメータ self と cls の違いは何ですか? __new__ メソッドにはパラメータとして cls が必要で、__init__ メソッドには self が必要なのはなぜですか?
まず第一に、あなたは 1 つのことを理解する必要があります:
self
和cls
的区别,cls
是代表这个类
,slef
是用来代表这个类的实例
、これを理解すれば、あなたは成功します。関数パラメータに
self
が付いているものは、インスタンスメソッドでありインスタンスにバインドされているこの関数として理解できます。__new__
方法, 是新式类用来创建实例使用的, 传入的cls
就是用来给object.__new__
创建实例使用的参数, 如果没有传入cls
,object
どんなインスタンスを作ればいいのか全く分かりません上記の内容と合わせて、出力が異なる 3 つの理由について説明します。
なぜ --new だけなのでしょうか? オブジェクトをインスタンス化するときにすべてのクラスがこれを呼び出す必要があるからです
__new__
方法, 去创建实例, 所以它肯定会被调用, 但是因为该函数被你重写了, 所以它只是打印了--new方法
, 并没有返回创建实例, 并且放回, 所以__del__
それも起こりませんポイント 1 で述べたように、なぜ --new と --del だけがあるのですか。しかし、ここでは確かにそうです
__new___
有创建新实例, 但是并没有返回, 因为只有返回了, 该对象才能进行下一步的__init__
、まさに作成のみがあり、戻りがないため、結果はこのようになります最初の2点を理解していれば問題ないと思います。これは作成されて返されるため、「__init__」も実行され、すべてが通常の動作として行われます
最後に、なぜ
__del__
会被执行, 理论上, 这个只有在实例被del
析构时, 才会执行,这里并没有del xtq
类似的代码, 为什么也会执行, 原因就是, 程序结束了, 要退出了, 在执行更底层的程序退出时,python
私たちは自発的に記憶のリサイクルを行うので、すべては塵に戻り、創造されたオブジェクトも一つずつ破壊されるのかについて説明したいと思います