Play with classes
Jacek Generowicz
jacek.generowicz at cern.ch
Thu Feb 26 07:14:52 EST 2004
Zunbeltz Izaola <zunbeltz at wm.lc.ehu.es.XXX> writes:
> I have the following classes defined
>
> ModeA, ModeB, TypeA, TypeB, TypeC, SubtypeA, SubtypeB.
>
> Supose the user whant to combine ModeA with TypeB and SubtypeB, so I need
> something like
>
> class UserClass(ModeA, TypeB, SubtypeB):
> pass
>
> I can define all the posibilitys different classes and the using nested
> if/else I can use the correct class, but I want to know if there is a way
> generate in the fly and in this way there is no necesarity to change code whe
> new Modes or Types are created.
Is the following what you want ?
======================================================
class TypeA: pass
class TypeB: pass
class TypeC: pass
class SubtypeA: pass
class SubtypeB: pass
collect_bases = [(Mode, Type, Subtype)
for Mode in [ModeA, ModeB]
for Type in [TypeA, TypeB, TypeC]
for Subtype in [SubtypeA, SubtypeB]]
count = 0
for bases in collect_bases:
name = "UserClass%d" % count
the_class = type(name, bases, {})
globals()[name] = the_class
count += 1
======================================================
Now you can try
>>> UserClass0.__bases__
(<class '__main__.ModeA'>, <class '__main__.TypeA'>, <class
'__main__.SubtypeA'>)
>>> UserClass1.__bases__
(<class '__main__.ModeA'>, <class '__main__.TypeA'>, <class
'__main__.SubtypeB'>)
>>> UserClass2.__bases__
(<class '__main__.ModeA'>, <class '__main__.TypeB'>, <class
'__main__.SubtypeA'>)
And so on, until
>>> UserClass11.__bases__
(<class '__main__.ModeB'>, <class '__main__.TypeC'>, <class
'__main__.SubtypeB'>)
More information about the Python-list
mailing list