这个问题可能看起来很傻(因为我是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和只有一个有什么区别...我的直觉告诉我,它是一个全局变量....如果它是一个全局变量,它根本没有意义(如果它是一个全局变量,我将编辑它)。谢谢!
答案 0 :(得分:0)
好的,我想我已经掌握了你的代码......它的工作方式是在调用构造函数时:
a = OnlyOne() #call constructor. This implicitly calls __new__
此时,__new__
检查类以查看是否已创建实例(实例不是None)。如果尚未创建,则会创建一个实例并将其放入instance
类属性中。然后返回instance
class属性,然后将其作为self
传递给您的方法。
我认为,如果你真的需要一个单身人士,那么你的程序设计就会有些可疑(懒惰)。单身人士允许信息以奇怪的方式在整个程序中传播(想象函数foo
和bar
两者都会创建OnlyOne
的实例。您在foo
中所做的更改会在您出现时显示致电bar
) - 这有点类似于猴子补丁。
如果在重新思考你的设计几个月之后,你决定你确实需要一个单身,那么你可以创建一些更透明的工厂类......