Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
class __name__ and subclass registration (extensible?) solution in Creative category for Army Units by PythonWithPI
class Army:
__slots__ = ()
def __new__(cls): return cls
class ArmyUnit:
__slots__=('name','army')
def __init__(self,army,name):
self.name = name
self.army = army
#print('init unit',army.__name__.rstrip('Army'),type(self).__name__,name)
def __init_subclass__(subclass):
'''Register army unit type'''
setattr(Army,'train_'+subclass.__name__.lower(),classmethod(subclass))
def introduce(self):
return "{} {}, {} {}".format(self.army.unit_names[type(self)],self.name,self.army.__name__[:-4],type(self).__name__.lower())
unitNames = "Swordsman Lancer Archer".split()
[globals().__setitem__(name,type(name,(ArmyUnit,),cmap)) for name in unitNames for cmap in ({'__slots__':()},)]
class AsianArmy(Army):
__slots__ = ()
unit_names = {
Swordsman:'Samurai',
Lancer:'Ronin',
Archer:'Shinobi' }
class EuropeanArmy(Army):
__slots__ = ()
unit_names = {
Swordsman:'Knight',
Lancer:'Raubritter',
Archer:'Ranger' }
June 26, 2019