可以从__new__返回None吗?

时间:2010-10-05 02:28:18

标签: python new-operator

通常,如果类的用户知道有时构造函数将评估为None,那么从__new__方法返回None是否合理?

文档并不意味着它是非法的,我没有看到任何直接的问题(因为__init__不会被调用,所以不是自定义类的实例!)。但我很担心

  1. 是否可能有其他不可预见的问题
  2. 让构造函数返回None
  3. 是否是一个很好的编程习惯

    具体示例:

    class MyNumber(int):
        def __new__(cls, value): # value is a string (usually) parsed from a file
            if value == 'N.A.':
                return None
            return int.__new__(cls, value)
    

2 个答案:

答案 0 :(得分:7)

这不违法。如果对结果没有做任何奇怪的事情,它就会起作用。

答案 1 :(得分:3)

你应该避免这种情况。文档没有详尽地列出你不应该做的事情,但它说明了__new__ 应该做什么:返回类的实例。

如果您不想在某些情况下返回新对象,请引发异常。