Weekly backup.
This commit is contained in:
59
20220519090118-la_methode_prepare.org
Normal file
59
20220519090118-la_methode_prepare.org
Normal file
@@ -0,0 +1,59 @@
|
||||
: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]]
|
Reference in New Issue
Block a user