Цикл над пользовательским классом - PullRequest
1 голос
/ 14 октября 2019

Я создал класс file для хранения некоторых свойств файла:

class file:
    def __init__(self, filepath):
        self.path = filepath
        self.name = self.getName()
        self.type = self.getType()

    def getName(self):
        return Path(self.path).stem

    def getType(self):
        return 'some filetype'

    def getContent(self):
        with open(self.path, 'rt') as fid:
            return fid.read()

Теперь я хочу сохранить свойства многих файлов и легко получить определенное свойство всех файлов, поэтому ясделал класс files:

class files:
    def __init__(self):
        self.list = []

    def __iter__(self):
        return iter(self.list)

    def add(self, file):
        self.list.append(file)

    def getNames(self):
        return [file.name for file in self.list]

    def getTypes(self):
        return [file.type for file in self.list]

    def getPaths(self):
        return [file.path for file in self.list]

Это позволяет мне получить все имена файлов, выполнив

somefiles = files()
somefiles.add(file('src/test.txt')) # and some other

filenames = somefiles.getNames()

Реализуя метод __iter__, это также позволяет мне зацикливатьсянад списком в files, просто выполнив:

for file in somefiles:
    pass

Является ли это питоническим способом циклического обхода «подобъектов» класса? Кажется немного странным хранить мои экземпляры file в списке, а затем преобразовывать их в итерируемые, выполняя iter(self.list). Каким был бы питонический путь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...