Является ли питоническим вызов метода из инициализатора класса?

Я чувствую, что это более общий вопрос, но вот пример, который я рассматриваю: у меня есть класс python, который во время своей инициализации проходит через zip-архив и извлекает некоторые данные.

Должен ли приведенный ниже фрагмент кода явно записываться внутри "def init" или он должен быть сделан как метод снаружи, который будет вызываться внутри "def init"? Какой подход является наиболее "питоническим"?

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 ответа

Решение

Если вы хотите выполнить показанные вами заявления более чем в одном месте, тогда обсуждения действительно нет. Без метода или функции для этой задачи вы будете нарушать принцип СУХОЙ.

Иначе... хорошо, я бы написал метод независимо. Задание, которое вы показываете, прекрасно автономно и должно быть абстрагировано под описательным именем. Это сделает ваш __init__ метод легче поддерживать и легче читать.

Вам также следует рассмотреть возможность написания кода, который вы показываете как функцию уровня модуля, принимающую шаблон в качестве аргумента, потому что помимо self.pattern Атрибут Задача, похоже, не имеет сильной связи с данными и методами ваших экземпляров классов (от того, что мы сейчас).

Это прекрасно для __init__() вызывать другие функции, в том числе методы того же класса.

Другие вопросы по тегам