下面定义的MyClass
接受单个参数arg
。在
class MyClass(object):
def __init__(self, arg):
super(MyClass, self).__init__()
if not isinstance(arg, int):
return None
else:
self.arg = arg
如果传入参数arg
不是整数,我希望返回None,而不是MyClass
的实例。在
但是即使MyClass
构造函数__init__
在arg
不是整数时返回None,结果变量{
print a
<__main__.MyClass object at 0x0000000001FDEFD0>
如果给MyClass
一个非整数参数,如何确保变量a
仍然是None
?在
您通常不应该这样做,但是如果您愿意,可以通过重写您的
__new__
,在这里创建新实例:__init__
方法不创建实例,它只初始化它,从中返回{在
__new__
返回一个不是实例的对象(如本例中的None
),则不会调用__init__
。在不应使用上述方法的原因之一是:
^{pr2}$很多事情都会在你的代码中出现问题,以上只是一个例子。在
您不应该从构造函数返回
None
,即使这是可能的。MyClass()
的结果应该始终是MyClass
的一个实例或一个兼容的类;其他任何情况都将是非常令人惊讶和错误诱导行为™. 在您可以使用一个自定义的
__new__
方法来实现这一点,该方法创建实际的实例。不过,我还是不推荐。在如果无法使用给定数据构造对象,则应该引发异常:
相关问题 更多 >
编程相关推荐