【发布时间】:2014-06-11 10:26:06
【问题描述】:
有时,在课堂上,我喜欢__init__,当传递给它时,例如错误的参数,不要实例化对象。一个解决方案可能是引发异常(哪个?)。还有其他想法吗?
【问题讨论】:
标签: python constructor init
有时,在课堂上,我喜欢__init__,当传递给它时,例如错误的参数,不要实例化对象。一个解决方案可能是引发异常(哪个?)。还有其他想法吗?
【问题讨论】:
标签: python constructor init
引发异常。 构造函数与其调用者有合约。它承诺从有效输入创建一个有效对象。如果它不能这样做,例如因为它的输入无效,它应该引发一个异常来指示它的失败。
如果__init__() 成功退出,即没有引发异常,则根据定义,这意味着对象已成功构造和初始化。
如何做到这一点的人为示例:
class Bacon:
def __init__(self, deliciousness=1000):
if deliciousness < 100:
raise InvalidArgumentException('Bacon is always delicous')
self.deliciousness = deliciousness
【讨论】:
__init__ 时已经创建。但是提出异常仍然是正确的做法; 构造函数(例如object.__new__)产生新的实例对象,调用__init__来初始化该对象。