0

この質問はばかげているように見えるかもしれませんが (私は python を初めて使用するため)、Binding 時の self と classname の違いを教えてください。

class OnlyOne(object):

  class __OnlyOne:
    def __init__(self):
       self.val = None

    def __str__(self):
       return ´self´ + self.val

 instance = None

 def __new__(cls): # __new__ always a classmethod
    if not OnlyOne.instance:
      OnlyOne.instance = OnlyOne.__OnlyOne()
            return OnlyOne.instance

 def __getattr__(self, name):
     return getattr(self.instance, name)

 def __setattr__(self, name):
      return setattr(self.instance, name)

ここでは、通常、Instance を self として使用します... self と Only one の使用の違いは何ですか... 私の直感では、それはグローバル変数であることがわかります.... グローバル変数の場合、それは作成しませんまったく意味があります(グローバル変数の場合、これを編集します)。ありがとう!!

4

1 に答える 1

0

わかりました、私はあなたのコードのハンドルを持っていると思います...それが機能する方法は、コンストラクターが呼び出されるときです:

a = OnlyOne()  #call constructor.  This implicitly calls __new__

この時点で__new__、クラスをチェックして、インスタンスが作成されているかどうかを確認します (インスタンスは None ではありません)。作成されていない場合は、インスタンスを作成し、それをinstanceclass 属性に入れます。次に、instanceクラス属性が返され、メソッドに として渡されますself

実際にシングルトンが必要な場合は、プログラムの設計に何か怪しい (怠惰な) ものがあると思います。シングルトンを使用すると、プログラム全体に奇妙な方法で情報を伝達できます (のインスタンスを作成する関数fooとその両方を想像してください。を呼び出したときに変更が表示されます)。barOnlyOnefoobar

数か月間設計を再考した後、シングルトンが本当に必要であると判断した場合は、より透過的なファクトリ クラスを作成できます...

于 2012-07-27T00:31:25.667 に答える