从__new__返回None可以吗?

7 投票
2 回答
1754 浏览
提问于 2025-04-16 05:00

一般来说,如果一个类的使用者知道有时候构造函数会返回 None,那么在 __new__ 方法中返回 None 合理吗?

文档没有说这样做是违法的,我也没有看到有什么立刻的问题(因为 __init__ 不会被调用,None 也不是这个自定义类的实例!)。但我担心的是:

  1. 这可能会引发其他意想不到的问题
  2. 让构造函数返回 None 是否是一种好的编程习惯

具体例子:

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 个回答

3

你应该避免这样做。文档没有详细列出所有你不应该做的事情,但它说明了__new__ 应该做什么:返回一个类的实例。

如果在某些情况下你不想返回一个新对象,就抛出一个异常。

8

这并不是违法的。如果对结果没有做什么奇怪的事情,它就会正常工作。

撰写回答