从类初始化程序中调用方法是pythonic吗?

时间:2016-03-26 11:58:18

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

我觉得这是一个更普遍的问题,但这是我正在考虑的一个例子:我有一个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")

2 个答案:

答案 0 :(得分:3)

如果你想执行你在多个地方展示的陈述,那么真的没有讨论。如果没有此任务的方法或功能,您将违反DRY原则。

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

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

答案 1 :(得分:1)

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