:PROPERTIES: :ID: 0d9a7351-babd-4394-9d95-1d40cb46f615 :mtime: 20220520230717 :ctime: 20220519090118 :END: #+title: La méthode __prepare__ * Synthaxe #+BEGIN_SRC python class.__prepare__() #+END_SRC La méthode ~class.__prepare__~ : * Cf. [[https://peps.python.org/pep-3115/][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 #+BEGIN_SRC python :results output 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=}') #+END_SRC #+RESULTS: : DummyMeta.__prepare__ : Dummy.__new__(dummy1) : Dummy.__init__(dummy1) : Dummy.__new__(dummy2) : Dummy.__init__(dummy2) : dummy1.special=1 : dummy1.special=2 : dummy2.special=1 * Références * [[https://blog.ionelmc.ro/2015/02/09/understanding-python-metaclasses/][Understanding Python metaclasses - Ionel codelog]] * [[https://zestedesavoir.com/tutoriels/954/notions-de-python-avancees/4-classes/2-metaclasses/][Metaclasses - Zeste de savoir]]