11

del()是否可以在某些条件下对某些实例进行类调用?还是把self变成None?

    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

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

4

5 回答 5

8

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

__init__()如果您只是想阻止创建此类实例,请在满足条件时引发异常。

这是发出构造函数失败信号的标准协议。有关进一步的讨论,请参阅Python:在 __init__ 中引发异常是一种不好的形式吗?

于 2012-11-06T21:50:20.610 回答
3

调查__new__。您应该能够检测到您关心的状况并返回None。正如@lzkata 在评论中提到的那样,提高 anException可能是一种更好的方法。

于 2012-11-06T21:50:16.897 回答
2

您可以按照评论中的建议提出异常。您可以实施__new__. 你也可以做一些工厂课,比如

class TFactory:
    def createT(self, arg1, arg2):
        condition=check_condition(arg1,arg2)
        if not condition:
           return do_something(arg1)
        else:
           return None     
于 2012-11-06T21:51:22.503 回答
2

是的,您可以调用 del self。它工作得很好,但你应该知道它所做的只是删除对init方法中名为“self”的实例的引用。

在 python 中,只要在某处有对它们的引用,对象就存在。

如果您希望对象在某些条件下永远不存在,那么永远不要尝试在这些条件下创建实例,在您创建对象的init之外。

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

于 2012-11-06T21:57:34.823 回答
1

类构造函数旨在真正构造其类的实例,而不是通过不构造实例并返回 None 来半静默地失败。没有人会想到这种行为。

而是使用工厂函数。

class Test(object):
    @classmethod
    def create(cls):
        if ok(): return cls()
        else: return None
于 2012-11-06T22:01:14.557 回答