ホームページ  >  に質問  >  本文

【Python初心者】__new__メソッドの機能について質問する

コード 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 が必要なのはなぜですか?

phpcn_u1582phpcn_u15822670日前592

全員に返信(1)返信します

  • 过去多啦不再A梦

    过去多啦不再A梦2017-06-28 09:26:55

    まず第一に、あなたは 1 つのことを理解する必要があります: selfcls的区别, cls是代表这个类, slef是用来代表这个类的实例、これを理解すれば、あなたは成功します。

    関数パラメータにselfが付いているものは、インスタンスメソッドでありインスタンスにバインドされているこの関数として理解できます。

    __new__方法, 是新式类用来创建实例使用的, 传入的cls就是用来给object.__new__创建实例使用的参数, 如果没有传入cls, objectどんなインスタンスを作ればいいのか全く分かりません

    上記の内容と合わせて、出力が異なる 3 つの理由について説明します。

    1. なぜ --new だけなのでしょうか? オブジェクトをインスタンス化するときにすべてのクラスがこれを呼び出す必要があるからです__new__方法, 去创建实例, 所以它肯定会被调用, 但是因为该函数被你重写了, 所以它只是打印了--new方法, 并没有返回创建实例, 并且放回, 所以__del__それも起こりません

    2. ポイント 1 で述べたように、なぜ --new と --del だけがあるのですか。しかし、ここでは確かにそうです __new___有创建新实例, 但是并没有返回, 因为只有返回了, 该对象才能进行下一步的__init__、まさに作成のみがあり、戻りがないため、結果はこのようになります

    3. 最初の2点を理解していれば問題ないと思います。これは作成されて返されるため、「__init__」も実行され、すべてが通常の動作として行われます

    最後に、なぜ__del__会被执行, 理论上, 这个只有在实例被del析构时, 才会执行,这里并没有del xtq类似的代码, 为什么也会执行, 原因就是, 程序结束了, 要退出了, 在执行更底层的程序退出时, python私たちは自発的に記憶のリサイクルを行うので、すべては塵に戻り、創造されたオブジェクトも一つずつ破壊されるのかについて説明したいと思います

    返事
    0
  • キャンセル返事