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:)它非常棒,但还有进一步的解释吗?