【发布时间】:2013-06-24 08:25:46
【问题描述】:
首先,我知道 Python 中类的 __init__() 函数不能返回值,所以很遗憾这个选项不可用。
由于我的代码结构,在类的__init__ 函数中包含数据断言(并提示用户提供信息)是有意义的。但是,这意味着对象的创建可能会失败,我希望能够优雅地从中恢复。
我想知道继续进行此操作的最佳方法是什么。我考虑过将全局布尔值设置为“有效构造”标志,但我不希望这样做。
还有其他想法吗(除了重组,因此断言可以在初始化之外发生并且值作为参数传入)?我基本上是在寻找一种在初始化期间成功返回 0 并在失败时返回 -1 的方法。 (和大多数 C 系统调用一样)
【问题讨论】:
-
引发异常。
-
成功返回 0 失败返回 -1 是非常不符合 Python 的。错误返回是不好的,因为它们很容易被忽略,而且处理起来很冗长。最重要的是,使用 0 和 -1 作为布尔值只会增加混乱而没有任何好处。不要真正使用 Python 编写 C 代码。
-
正如@jsbueno 在他的回答中指出的那样,类实例在
__init__()中初始化,而不是创建,这就是为什么它没有return一个值。您可以在类中添加一个数据成员以指示其状态,然后直接检查其值或调用在调用__init__()后返回其值的方法,而不是使用全局变量来检测失败或抛出异常确定错误时是否有任何(以及可能是什么)。