Python __init__返回创建失败

Phi*_*sey 9 python return init

首先,我知道__init__()Python中的类函数不能返回值,所以遗憾的是这个选项不可用.

由于我的代码结构__init__,在类的函数内部进行数据断言(以及提示用户提供信息)是有意义的.但是,这意味着对象的创建可能会失败,我希望能够从此优雅地恢复.

我想知道继续这个的最好方法是什么.我已经考虑将全局布尔值设置为"有效构造"标志,但我不想这样做.

任何其他的想法(除了重组,所以断言可以在初始化之外发生,值作为参数传递)?我基本上是在寻找一种方法,在成功时返回0并在初始化期间返回-1.(像大多数C系统调用一样)

jsb*_*eno 15

你可以在assertio失败时引发异常,或者 - 如果你真的不想要或不能处理异常,你可以__new__在你的类中编写 方法 - 在Python中,__init__技术上是一个"初始化器"方法 - 它应该填充他的属性并获取一些资源以及你的对象在其生命周期中需要的其他资源 - 但是,Python确实定义了一个真正的构造函数,该__new__方法在之前被调用__init__- 并且与此不同,__new__实际上确实返回一个值:新创建的(未初始化的)实例本身.

所以你可以把你的支票放在里面__new__然后简单地返回None是失败的 - 否则,将调用的结果返回到超类__new__方法(在纯Python中不能为对象做实际的内存分配,所以最终你必须调用在超类中用本机代码编写的构造函数 - 通常这是object.__new__在类层次结构的基础上.

注意:在Python 2中,您必须具有object作为层次结构的基类 - 否则不仅__new__不会被调用,因为稍后添加到Python对象的许多功能将无法工作.简而言之,class MyClass(object):从来没有class MyClass:- 除非你使用的是Python3.