Les classes intégrées ne peuvent pas être modifiées, mais vous pouvez "masquer" une classe intégrée (ou toute autre, bien sûr) par un même nom.
Par exemple, supposons que le changement est d'ajouter un groupe de classes un nouvel attribut « foobar », dont la valeur initiale est 23, et à chaque exemple de ces classes un nouvel attribut « murf », dont la valeur initiale est 45. est ici une façon:
def changedclass(cls):
def __init__(self, *a, **k):
cls.__init__(self, *a, **k)
self.murf = 45
return type(cls.__name__, (cls,), {'foobar': 23, '__init__': __init__})
def changemany(changed, classes_by_module):
for module, classnames in classes_by_module.iteritems():
for name in classnames:
cls = getattr(module, name)
subcls = changed(cls)
setattr(module, name, subcls)
import __builtin__
import mymod
changemany(changedclass, {__builtin__: ('int', 'str'), mymod: ('Person',)})
Notez que les littéraux nus comme « ciao » et 23 appartiendront toujours aux vrais cours - il n'y a pas moyen de changer cela; vous aurez besoin d'utiliser str('ciao')
et int(23)
pour utiliser les classes "fausses".
Quel est le cas d'utilisation? –
Implémentation d'un mode de corruption pour Python. –
Vous devrez également être en mesure de ré-implémenter tous les opérateurs dans la langue. Je ne pense pas que tu vas pouvoir faire ce que tu veux. –