应该使用哪个内置的Python异常来表示我的类的实例(例如MCWindow
)已经创建了?它会遵循这样的事情:
window = MCWindow()
try:
aWindow = MCWindow()
except DontMakeAnotherOneOfTheseInstancesException:
print("Whoops") # Always the best way to handle exceptions :)
单例模式在这里可能更合适,但我仍然想知道这种情况是否存在内置异常。
答案 0 :(得分:1)
单身模式在python
中并不常见。通常,使用模块而不是对象实例。
换句话说,没有准确的内置异常。创建自己的,或切换到模块。
注意:使用一些元编程可以创建一个类,当实例化时,它总是返回相同的对象,不涉及异常。
答案 1 :(得分:1)
实际上你可以做一点调整
# 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
这是你的类被实例化为singleton
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)
答案 2 :(得分:0)
我不这么认为。 您可能可以使用RuntimeError或您自己的继承异常。 Here您可以找到所有内置异常及其说明的列表。
虽然如你所说,谷歌搜索“python singleton”会给你更好的解决方案。