2016-03-26 5 views
2

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

Должен ли код-кусок ниже быть явно указан внутри «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") 
+0

Всегда целесообразно группировать связанные операторы для определенной цели в отдельном методе. –

ответ

3

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

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

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

+0

Я прошу нисходящего объяснить, что он/она ненавидит о моем ответе, спасибо. – timgeb

+0

Активировано для указания функции уровня модуля. – Yannis

1

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