Я создал класс 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)
. Каким был бы питонический путь?