Python单例属性错误
我有这样一个单例实现:Python单例属性错误,python,attributes,singleton,Python,Attributes,Singleton,我有这样一个单例实现: class Test123(object): _instance = None def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = super(Test123, cls).__new__(cls, *args, **kwargs) return cls._instance def i
class Test123(object):
_instance = None
def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super(Test123, cls).__new__(cls, *args, **kwargs)
return cls._instance
def initialize(self):
self.attr1 = 500
self.attr2= 0
self.attr3= 0.10
def printit(self):
print self.attr1
print self.attr2
print self.attr3
我不知道;t实现uuu init uuuu,因为每次我使用单例时都会调用它,所以为了避开它,我只需在脚本开始时调用initialize
每当我运行它时:
Test123().initialize()
time.sleep(1)
Test123().printit()
我得到这个错误:
Traceback (most recent call last):
File "Z:\test\test123.py", line 22, in <module>
500
Test123().printit()
File "Z:\test\test123.py", line 17, in printit
print self.attr2
AttributeError: 'Test123' object has no attribute 'attr2'
Traceback (most recent call last):
File "Z:\test\DataAccess.py", line 36, in <module>
DataAccessLayer().addrow()
File "Z:\test\DataAccess.py", line 25, in addOption
cur = self.dalConnection.cursor()
AttributeError: DataAccessLayer instance has no attribute 'dalConnection'
Exception AttributeError: "DataAccessLayer instance has no attribute 'dalConnection'" in <bound method DataAccessLayer.__del__ of <__main__.DataAccessLayer instance at 0x00000000022A2748>> ignored
创建此错误:
Traceback (most recent call last):
File "Z:\test\test123.py", line 22, in <module>
500
Test123().printit()
File "Z:\test\test123.py", line 17, in printit
print self.attr2
AttributeError: 'Test123' object has no attribute 'attr2'
Traceback (most recent call last):
File "Z:\test\DataAccess.py", line 36, in <module>
DataAccessLayer().addrow()
File "Z:\test\DataAccess.py", line 25, in addOption
cur = self.dalConnection.cursor()
AttributeError: DataAccessLayer instance has no attribute 'dalConnection'
Exception AttributeError: "DataAccessLayer instance has no attribute 'dalConnection'" in <bound method DataAccessLayer.__del__ of <__main__.DataAccessLayer instance at 0x00000000022A2748>> ignored
回溯(最近一次呼叫最后一次):
文件“Z:\test\DataAccess.py”,第36行,在
DataAccessLayer().addrow()
文件“Z:\test\DataAccess.py”,第25行,在addOption中
cur=self.dalConnection.cursor()
AttributeError:DataAccessLayer实例没有属性“dalConnection”
异常AttributeError:“DataAccessLayer实例在忽略中没有属性'dalConnection'”
您的DataAccessLayer
是一个旧式类。尝试类DataAccessLayer(对象):…
更新:
类类型
类类型或“新型类”是可调用的。这些对象通常充当自身新实例的工厂,但重写_unew__;()的类类型可能会有变化。调用的参数被传递到_unew_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
经典课程
下面介绍类对象。调用类对象时,将创建并返回一个新的类实例(如下所述)。这意味着调用类的_init__;()方法(如果有)。任何参数都会传递给uuu init_uuuu()方法。如果没有uuu init_uuuu()方法,则必须在不带参数的情况下调用该类
来源:有点离题,但。。。这对我来说一点也不像蟒蛇。我会试着写一个装饰类的Singleton,这样我就可以了
@Sigleton
class MySingleton(object):
pass
如果您再次需要它,您也可以随时快速重用它
注意:它可能会使元数据变得很混乱(MySingleton是Singleton的实例,而不是MySingleton),但functools.wrapps可能会有所帮助…对我有用。您是否也经历过测试用例失败,或者仅在实际程序中失败?什么Python版本?nvm刚刚再次尝试了测试用例,似乎工作得很好(我确实是从另一个repo启动的)。Python有一个名为的设计模式,通常被认为比Singleton更整洁。它可以工作thx:)它非常棒,但还有进一步的解释吗?