Files
org-roamings/20220519090118-la_methode_prepare.org
2022-06-04 12:57:39 +02:00

1.7 KiB

La méthode prepare

Synthaxe

class.__prepare__()

La méthode class.__prepare__ :

  • Cf. PEP-3115 - Metaclasses in Python 3000,
  • Est utilisé comme namespace local pour tout le code du corps de la classe (prépare le contenu du dictionnaire dict de l'instance).
  • Est appelée avant class.__new__,
  • Doit retourner un objet dictionary-like,

Exemples

class DummyMeta(type):

    @classmethod
    def __prepare__(mcs, name, bases, **kwargs):
        print('DummyMeta.__prepare__')
        return {'special': 1}
            
class Dummy(metaclass=DummyMeta):
    
    def __new__(cls, name):
        print(f'Dummy.__new__({name})')
        return super().__new__(cls)
    
    def __init__(self, name):
        super().__init__()
        self.name = name
        print(f'Dummy.__init__({self.name})')

dummy1, dummy2 = (Dummy(f'dummy{i + 1}') for i in range(2))
print(f'{dummy1.special=}')
dummy1.special += 1
print(f'{dummy1.special=}')
print(f'{dummy2.special=}')
DummyMeta.__prepare__
Dummy.__new__(dummy1)
Dummy.__init__(dummy1)
Dummy.__new__(dummy2)
Dummy.__init__(dummy2)
dummy1.special=1
dummy1.special=2
dummy2.special=1