是否可以在某些条件下为某些实例调用类del()
?或者将自己变成无?
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
我需要做这样的事情,以确保永远不会存在某种实例。
答案 0 :(得分:8)
我需要做这样的事情,以确保永远不会存在某种实例。
如果您只想阻止创建此类实例,请在条件满足时在__init__()
中引发异常。
这是信令构造函数失败的标准协议。有关进一步的讨论,请参阅Python: is it bad form to raise exceptions within __init__?
答案 1 :(得分:3)
查看__new__
。您应该能够检测到您关心的情况并返回None
。正如@lzkata在评论中提到的那样,提出Exception
可能是一种更好的方法。
答案 2 :(得分:2)
您可以按照评论中的建议引发异常。您可以实施__new__
。你也可以制作一些工厂类,比如
class TFactory:
def createT(self, arg1, arg2):
condition=check_condition(arg1,arg2)
if not condition:
return do_something(arg1)
else:
return None
答案 3 :(得分:1)
是的,你可以打电话给del self。它工作正常,但你应该知道它所做的只是删除对 init 方法中名为“self”的实例的引用。
在python中,只要在某处有对象的引用,对象就会存在。
如果您希望对象在某些条件下永远不存在,那么请不要尝试在 init 之外的条件下创建实例。
此外,您可以在此类中定义一个有用的函数,以返回是否满足这些条件。
答案 4 :(得分:1)
类构造函数旨在真正构造其类的实例,而不是半静默地失败,只是不构造实例并返回None。没有人会期待这种行为。
而是使用工厂功能。
class Test(object):
@classmethod
def create(cls):
if ok(): return cls()
else: return None