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

【Python初心者】オブジェクトの初期化について質問する

コードは以下のように表示されます:

リーリー

結果:

######私の質問:######

私のアイデアによれば、このコードで書いたのは、Dog クラスを設計し、シングルトン オブジェクト (最初の赤いボックスのコード) を作成することです。最後のインスタンス a と b は実際には同じものです。 次に、このシングルトン オブジェクトをセットアップし、一度だけ初期化しました (2 番目の赤いボックス内のコードを参照)。つまり、インスタンス a が作成された後の名前は Wangcai となり、インスタンス b が作成された後、インスタンス b になります。は初期化しないでください。そのため、Roaring Sky Dog という名前を出力することはできないはずです。私の考えによれば、印刷されるべき結果は 2 つの豊かな富です。結果が私が予想したものと異なるのはなぜですか?

我想大声告诉你我想大声告诉你2669日前633

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

  • 阿神

    阿神2017-06-28 09:26:24

    実際、シングルトン オブジェクトはすでに実装されており、それは id的结果已经看出来了, 至于为什么你两次的结果会不一样呢? 因为创建返回是一回事, 初始化又是一回事, 在__new__里面, 确认了不会创建新实例, 返回的是旧实例, 但是这并不影响下一步的__init__初始化动作啊, 而且你修改的__init_flag = True只是在实例对象里面而已, 并没有修改到那边, 所以你的判断在无效的, 只有修改到那边的__init_flag からのみ有効であるため、コードは次のように修正されます:

    リーリー

    さらに 2 つの提案:

    1. オブジェクトがNoneかどうかを判定する場合は==, 应该用is: cls.__instance is None

    2. を使用しないでください
    3. false, 也不要用==, 应该是not: if not self.__init_flag

    4. と等しいかどうかを判断します

    返事
    0
  • キャンセル返事