从 class 初始值设定项内部调用方法是 pythonic 吗?

Is it pythonic to call methods from inside class initializer?

我觉得这是一个更笼统的问题,但这是我正在考虑的一个例子:我有一个 python class,它在初始化过程中通过一个 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")

__init__()调用其他函数完全没问题,包括相同class的方法。

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

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

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