1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
class BaseCreature(type):
def __new__(metacls, name, bases, dct):
# Petit contrôle des arguments.
def _initialize(method):
def _control_arguments(self, *args, **kwargs):
pv = kwargs.pop('pv', 1)
self.pv = pv
return method(self, *args, **kwargs)
return _control_arguments
if dct.get('__init__', None):
dct['__init__'] = _initialize(dct['__init__'])
return type.__new__(metacls, name, bases, dct)
class Creature(object):
__metaclass__ = BaseCreature
class Monstre(Creature):
def __init__(self, laideur=0):
self.laideur = laideur
class Heros(Creature):
def __init__(self, beaute=0):
self.beaute = beaute
def test():
orc = Monstre(pv=4, laideur=3)
belle_mere = Monstre(laideur=10)
jean = Heros(beaute=5)
sekigo = Heros(pv=100, beaute=100)
assert getattr(sekigo, 'pv') == 100
assert getattr(sekigo, 'beaute') == 100
assert getattr(belle_mere, 'pv') == 1
assert getattr(belle_mere, 'laideur') == 10
if __name__ == "__main__":
test() |
Partager