从__new__返回None可以吗?
一般来说,如果一个类的使用者知道有时候构造函数会返回 None,那么在 __new__
方法中返回 None 合理吗?
文档没有说这样做是违法的,我也没有看到有什么立刻的问题(因为 __init__
不会被调用,None 也不是这个自定义类的实例!)。但我担心的是:
- 这可能会引发其他意想不到的问题
- 让构造函数返回 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
这并不是违法的。如果对结果没有做什么奇怪的事情,它就会正常工作。