【问题标题】:Bad form to return None in __init__ in python在 python 的 __init__ 中返回 None 的错误形式
【发布时间】:2014-04-08 13:48:57
【问题描述】:

我正在修补一些课程,我遇到了一种情况,我想在 __init__ 有机会做更多事情之前切断它。为此,我只需在要切断的块的末尾放置一个空的return 语句。例如:

class Example(object):
    def __init__(self):
        #lots and lots of code
        if so_and_so:
            return

__init__内部返回是不是很糟糕,即使只是在这种情况下?

【问题讨论】:

  • 您可能需要使用__new__ 而不是__init____init__ 不是构造函数,它是初始化器
  • 同意,如果你想要一个返回值,你应该使用 new
  • 但是 OP 并没有尝试返回非 None 值。 OP只是想早点休息。 return 没问题...
  • 你不能从 __init__() 中返回任何东西,只要在其中使用条件,如果匹配做初始化,否则什么都不做。

标签: python class coding-style initialization


【解决方案1】:

一根绳子有多长?如果您不需要进一步初始化,那么继续没有意义。由于None 无论如何都会在最后隐式返回(实际上应该是__init__() 返回的唯一 东西),如果初始化已完成,则尽早返回它是可以的。

OTOH,如果您需要中止初始化,那么您应该引发异常。

【讨论】:

    【解决方案2】:

    对于任何函数,不只是__init__,使用普通的return相当于返回None,如果你不在函数中使用return,无论如何都会隐式返回None

    因此,在__init__ 中使用return 完全没问题。

    (上述规则的例外是生成器函数,其中您只能使用return 而不能使用return None,因此它们在生成器函数内部不等效。

    __init__ 中间返回将简单地切断对象的初始化。它不会阻止对象的创建,也不会以任何方式中断程序的流程。

    【讨论】:

    • 据我了解,他/她询问是否可以中止对象创建。这应该在__init__ 之外完成,该__init__ 用于对象初始化,而不是对象创建
    • @user3159253,好的,谢谢。我添加了一条评论,澄清了我的回答所指的内容
    • 我认为你不能从 __init__() 返回任何东西
    • @sjcipher 正确,除了来自__init__None 之外,您可能不会返回任何内容。在我的回答中,我没有声称你可以。但是,returnreturn None 都有效。 (请重新考虑否决...)
    猜你喜欢
    • 2011-11-29
    • 1970-01-01
    • 2019-08-09
    • 2019-07-09
    • 2013-04-07
    • 2018-08-14
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    相关资源
    最近更新 更多