这个问题可能看起来很傻(因为我是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允许信息以奇怪的方式在整个程序中传播(想象一下函数foo
和bar
都创建了OnlyOne
的实例。当你调用bar
时,你在foo
中所做的更改就会显示出来)——这有点类似于猴子补丁。
如果在重新思考了几个月的设计后,您决定确实需要一个singleton,那么您可以创建某种更透明的工厂类。。。