D/B 'self'并在<ClassName>类本身内绑定函数。(Python中的单例)



这个问题可能看起来很傻(因为我是python的新手),但你们能告诉我绑定时self和类名之间的区别吗?

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)

在这里,我通常使用实例作为self。。。使用自我和只使用一个…有什么区别。。。我的直觉告诉我,这是一个全局变量。。。。如果它是一个全局变量,那么它根本没有意义(如果它是全局变量,我会编辑它)。谢谢

好吧,我想我已经掌握了你的代码。。。它的工作方式是,当调用构造函数时:

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

此时,__new__检查类以查看是否已创建实例(实例不是None)。如果它还没有创建,它会创建一个实例并将其放入instance类属性中。然后返回instance类属性,然后将其作为self传递到方法中。

我认为,如果你真的需要一个singleton,那么你的程序设计就有些可疑(懒惰)。Singleton允许信息以奇怪的方式在整个程序中传播(想象一下函数foobar都创建了OnlyOne的实例。当你调用bar时,你在foo中所做的更改就会显示出来)——这有点类似于猴子补丁。

如果在重新思考了几个月的设计后,您决定确实需要一个singleton,那么您可以创建某种更透明的工厂类。。。

相关内容

  • 没有找到相关文章