【问题标题】:What is the best way to NOT create the object in __init__()不在 __init__() 中创建对象的最佳方法是什么
【发布时间】:2014-06-11 10:26:06
【问题描述】:

有时,在课堂上,我喜欢__init__,当传递给它时,例如错误的参数,不要实例化对象。一个解决方案可能是引发异常(哪个?)。还有其他想法吗?

【问题讨论】:

    标签: python constructor init


    【解决方案1】:

    引发异常。 构造函数与其调用者有合约。它承诺从有效输入创建一个有效对象。如果它不能这样做,例如因为它的输入无效,它应该引发一个异常来指示它的失败。

    如果__init__() 成功退出,即没有引发异常,则根据定义,这意味着对象已成功构造和初始化。

    如何做到这一点的人为示例:

    class Bacon:
        def __init__(self, deliciousness=1000):
            if deliciousness < 100:
                raise InvalidArgumentException('Bacon is always delicous')
    
            self.deliciousness = deliciousness
    

    【讨论】:

    • 从技术上讲,对象在调用__init__ 时已经创建。但是提出异常仍然是正确的做法; 构造函数(例如object.__new__)产生新的实例对象,调用__init__来初始化该对象。
    • @MartijnPieters 谢谢!我更改了答案的措辞。
    猜你喜欢
    • 2011-09-18
    • 2020-05-28
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多