2016-04-12 20 views
2

birden fazla sınıflar oluşturun böyle bir listeden birden fazla sınıfları oluşturmak mümkün mü:listeden

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

Not: Ben benzer bir başlıkla bulunan tüm sorulara ise, Kendisine aslında birden fazla nesne yaratmak istedik tek bir sınıfın

cevap

3

dan Sen type kullanarak çalışma zamanında yeni bir sınıf oluşturabilirsiniz:

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. Sınıflar bir dict, ama onları sistem modülleri içinde nasıl? [name name, inspect.getmembers içindeki nesne (sys.modules [__ name__]) eğer inspect.isclass (obj)] ' – API

+0

Ana amacı tanımlamanız gerekir. SQLAlchemy kullanıyor musunuz? Muhtemelen, – soon

+0

SQLAlchemy sorununun çözümünde size yardımcı olacak bazı düşük düzeyli API sağlar; ama tek başına bir pir içinde bunun mümkün olmadığını mı düşünüyorsun? – API