繁体   English   中英

Python __init__ 返回创建失败

[英]Python __init__ return failure to create

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

由于我的代码结构,在 class 的__init__ function 内部进行数据断言(并提示用户提供信息)是有意义的。但是,这意味着 object 的创建可能会失败,我想能够从中优雅地恢复。

我想知道继续这样做的最好方法是什么。 我考虑过将全局 boolean 设置为“有效构造”标志,但我不想这样做。

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

你可以在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上。

你考虑过提出例外吗? 这是表示失败的通常方式。

写一个@classmethod 函数怎么样? 然后,您可以检查所有条件并创建和初始化一个新类,或者返回 None。 然后调用函数只需要检查返回的类是否不是 None。

我使用一些技巧返回了__init__

这是通过在__init__中出错来将错误设置为“尝试”的方法。

下面是一个示例代码。

import sys

class MyClass(object):
    def __init__(self, test=None):
        if test is None:
            sys.exit(1)

        self.test = test
        print("do something __init__ here")

try:
    obj = MyClass()
except:
    obj = None

print(obj)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM