self deleting instance
在某些情况下,是否可以对某些实例进行类调用
1 2 3 4 5 6 7 | class T: def __init__(self, arg1, arg2): condition=check_condition(arg1,arg2) if not condition: do_something(arg1) else: del(self) #or self=None or return None |
我需要做这样的事情,以确保永远不会存在这样的实例。
I need do something like this to be sure that will never exist a kind of instance.
如果您只是想阻止创建这样的实例,那么只要满足条件,就在
这是向构造函数失败发送信号的标准协议。如需进一步讨论,请参阅python:在uu init_uuuuuuu中引发异常是否是一种糟糕的形式?
查看
您可以按照注释中的建议引发异常。您可以实现
1 2 3 4 5 6 7 | class TFactory: def createT(self, arg1, arg2): condition=check_condition(arg1,arg2) if not condition: return do_something(arg1) else: return None |
类构造函数旨在真正构造其类的一个实例,而不是通过不构造实例而半自动失败,并且不返回任何实例。没有人会期望这种行为。
而是使用工厂功能。
1 2 3 4 5 | class Test(object): @classmethod def create(cls): if ok(): return cls() else: return None |
是的,你可以叫戴尔·赛尔夫。它工作得很好,但是您应该知道它所做的只是删除对in it方法中名为"self"的实例的引用。
在Python中,只要在某个地方有对对象的引用,对象就存在。
如果希望对象在某些条件下永远不存在,则不要在创建对象的init之外的那些条件下尝试创建实例。
另外,您可以在这个类中定义一个有用的函数来返回这些条件是否满足。