Salut,
J'ai fait quelques tests avec les slots, même si pour le moment j'en ai pas trop besoin, peut-être ultérieurement.
Bon pour être franc le modèle objet python, j'aime bien certains aspects, mais d'autres je déteste.
Le fonctionnement lors de l'héritage des slots me laisse vraiment circonspect à tel point que je me demande s'il y a vraiment des programmeurs qui les utilisent vu les contraintes que cela engendre.
Si on fait un truc basique, ok, c'est cool, ça fonctionne.
Mais dès lors, que l'on veut un peu complexifier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 class A : __slots__ = ['_var'] def __init__(self, valeur) : self._var = valeur @property def var(self) : return self._var class B(A) : def __init__(self, valeur) : A.__init__(self, valeur) a = A('A') b = B('B') print(a.var, b.var) # A, B
Ok, la doc est claire, faut ajouter __weakreference__ aux classes filles pour avoir un fonctionnement correct.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 class A : __slots__ = {'_var':None} def __init__(self, valeur) : self.__slots__['_var'] = valeur def __setattr__(self, cle, valeur) : raise NotImplementedError @property def var(self) : return self.__class__.__slots__['_var'] class B(A) : def __init__(self, valeur) : A.__init__(self, valeur) a = A('A') b = B('B') print(a.var, b.var) # B, B ...
Mais c'est moisi non ce truc ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part __slots__ = {'__weakreference__':None}
Y'a pas un subterfuge pour induire ce comportement depuis la classe mère ?
Et d'ailleurs, je me demande si on ne pourrait pas se servir de ce comportement de références implicite comme singleton.
Partager