其实你可以做到这一点,有一个小调整
# python object singleton
class Observer():
pass
observe = Observer()
class singleton():
def __init__(self,):
if observe.__dict__.has_key(self.__class__.__name__):
raise Exception, 'Only one instance of the same "%s" class is allowed' % self.__class__.__name__
observe.__dict__[self.__class__.__name__]=True
def some_method(self,):
# roll your own code
pass
one = singleton()
two = singleton() # will raise an error
观察员类是存储状态,单例类,是在请求中的类,它是要限制它的人只有一个实例,您可以创建许多类,如singleton
,但只有一个Observer
可以保持所有这些类的状态。
试试上面的代码和乐趣..它与我:))
更新 - 无需创建单引发异常
class Observer():
def __init__(self,):
self.error = None
def __setattr__(self,class_name,instance):
if not self.__dict__.has_key(instance.__class__.__name__):
self.__dict__[class_name]=instance
else:
self.error = 'You are only allowed to creat intance once'
def __getattr__(self,class_name):
if self.__dict__.has_key(class_name):
return self.__dict__[class_name]
else:
return None
这是你的类被实例化为单身人士
class test():
pass
使用
observe = Observer()
observe.test = test() # This will be created and bound to the variable
observe.test = test() # This will not be created nor bound, but will generate an error msg in observe.error
if not observe.error:
print 'created successfully'
else:
print 'Encountered a problem: %s, only this instance has been created: %s' % (observe.error,observe.test)
没有内置异常这一点,因为这是一个不做/信号的有用或有意义的事情,因为这样的限制,通常是没有意义的,当它是不是有更好的方法执行它。 **为什么**你必须强制只创建一个实例? – delnan
RuntimeError用于“当检测到不属于任何其他类别的错误时”,这是最适合的内置异常。但是使用自定义异常可能更好,或者不像其他人提到的那样使用单例。 – RemcoGerlich
@SimonT,检查我的答案 – securecurve