【Python初心者】オブジェクトの初期化について質問する
我想大声告诉你
我想大声告诉你 2017-06-28 09:24:24
0
1
681

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

リーリー

結果:

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

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

我想大声告诉你
我想大声告诉你

全員に返信(1)
阿神

実際、シングルトン オブジェクトはすでに実装されており、それは 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
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート