По множеству причин я нахожусь в положении импорта многих модулей python и хочу перебирать каждый из классов в модуле.Цитирование через импортированные классы в python
from capacity_hdd_parser import CapacityHDDParser
from capacity_ssd_parser import CapacitySSDParser
from checksum_parser import ChecksumParser
.
.
.
каждый анализатор уделы от базового класса и имеет метод, который я хочу призвать каждого синтаксического анализатора
parsers = [CapacityHDDParser, CapacitySSDParser, ChecksumParser]
for parser in parsers:
parser_instance = parser()
data_returned = parser_instance.parse(logset_path)
# Do a bunch of post processing here.
Моя проблема заключается в том, что у меня есть много парсеров, чтобы пройти, и я чувствую, что должен быть способом динамической итерации через импортированный класс. Имея в виду, чтобы написать каждый из них, это не только боль в заднице, но и делает мой код намного сложнее увидеть в шуме.
hack: 'for Parser in base_class .__ подклассы __()' – jfs
Если вы не можете найти совершенно другой метод достижения своей общей цели, я бы посоветовал вам придерживаться вашего текущего метода. Это кажется утомительным и подверженным ошибкам, но мета-программирование и манипулирование переменными и идентификаторами, как если бы они были данными, могут быть еще более рискованными. Ваш текущий подход кажется простым и читаемым, поэтому вы можете просто придерживаться его. Это похоже на проблему [XY Problem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). – skrrgwasme
@SLawson Моя последняя проблема заключается в том, что время запуска python больше времени для запуска парсеров, но такое обсуждение (я считаю) выходит за рамки вопроса SO. – AlexLordThorsen