【问题标题】:Is it pythonic to call methods from inside class initializer?从类初始化程序内部调用方法是pythonic吗?
【发布时间】:2016-07-14 02:20:47
【问题描述】:

我觉得这是一个更普遍的问题,但这是我正在考虑的一个例子:我有一个 python 类,它在初始化期间会通过一个 zip 存档并提取一些数据。

下面的代码块应该明确地写在“def init”中还是应该作为外部方法在“def init”中调用?哪种方法最“Pythonic”?

with ZipFile(filename, "r") as archive:
    for item in archive.namelist():
        match = self.pattern.match(item)
        if match:
            uid = match.group(2)
            time = match.group(3)
        else:
            raise BadZipFile("bad archive")

【问题讨论】:

  • 在单独的方法中为特定目的对相关语句进行分组始终是一种好习惯。

标签: python class python-3.x constructor initializer


【解决方案1】:

如果你想执行你在不止一个地方显示的语句,那么真的没有讨论。如果没有用于此任务的方法或函数,您将违反DRY 原则。

否则......好吧,无论如何我都会写一个方法。您展示的任务很好地自包含,应该以描述性名称进行抽象。这将使您的__init__ 方法更易于维护和阅读。

您还应该考虑将您显示的代码编写为接受模式作为参数的模块级函数,因为除了self.pattern 属性之外,该任务似乎与您的类的数据和方法没有紧密的联系实例(从我们现在开始)。

【讨论】:

  • 我恳请投票者解释他/她对我的回答的厌恶之处,谢谢。
【解决方案2】:

__init__() 可以调用其他函数,包括同一类的方法。

【讨论】:

    猜你喜欢
    • 2014-07-29
    • 2014-11-30
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    相关资源
    最近更新 更多