关于python:自删除实例

self deleting instance

在某些情况下,是否可以对某些实例进行类调用del()?还是把自己变成一无所有?

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.

如果您只是想阻止创建这样的实例,那么只要满足条件,就在__init__()中引发异常。

这是向构造函数失败发送信号的标准协议。如需进一步讨论,请参阅python:在uu init_uuuuuuu中引发异常是否是一种糟糕的形式?


查看__new__。您应该能够检测到您关心的情况并返回None。正如@lzkata在评论中提到的,提出一个Exception可能是更好的方法。


您可以按照注释中的建议引发异常。您可以实现__new__。你也可以做一些工厂课程,比如

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之外的那些条件下尝试创建实例。

另外,您可以在这个类中定义一个有用的函数来返回这些条件是否满足。