自我删除实例

时间:2012-11-06 21:46:01

标签: python

是否可以在某些条件下为某些实例调用类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

我需要做这样的事情,以确保永远不会存在某种实例。

5 个答案:

答案 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