2016-04-12 5 views
2

Можно создать несколько классов из списка, например:Создание нескольких классов из списка

for cn in ['ABC', 'DEF', 'GHI']: 
    class {cn.capitalize()?}(Base): 
     __mapper_args__ = { 
      'polymorphic_identity': cn.lower(), 
     } 

Примечание: Во всех вопросах, которые я нашел с похожим названием, спрашивающие на самом деле хотел создать несколько объектов из одного класса

ответ

3

Вы можете создать новый класс во время выполнения с помощью type:

In [17]: class_names = ['ABC', 'DEF', 'GHI'] 

In [18]: classes = {name: type(name.capitalize(), (Base,), 
         {'__mapper_args__': {'polymorphic_identity': name.lower()}}) 
      for name in class_names} 

In [19]: classes['DEF'] 
Out[19]: __main__.Def 

In [20]: classes['ABC']().__mapper_args__ 
Out[20]: {'polymorphic_identity': 'abc'} 

In [21]: import inspect 

In [22]: inspect.getmro(classes['GHI']) 
Out[22]: (__main__.Ghi, __main__.Base, object) 
+0

Ok. Классы находятся в dict, но как получить их в системных модулях? '[name for name, obj in inspect.getmembers (sys.modules [__ name__]), если inspect.isclass (obj)]' – API

+0

Вы должны описать основную цель. Вы используете SQLAlchemy? Вероятно, он предоставляет некоторый низкоуровневый API, который поможет вам в решении проблемы – soon

+0

SQLAlchemy; но в одиночной ру, вы думаете, что это невозможно? – API

Смежные вопросы