Bonjour,

j'ai une classe qui prend un objet et lui ajoute des propriétés en modifiant son MRO.
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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
 
# objet quelconque
class UnObjet:
 
    def __init__(self,x):
        self.x = x
        print('foo')
 
 
 
# classe qui modifie un objet
class Mod:
 
    def __new__(cls,objet,*args):
        objet.__class__ = type('**',(cls,objet.__class__),{})
        return objet
 
    def __init__(self,*args):
        print('mod')
 
    @property
    def y(self):
        return self.x + 2
 
 
 
#classe qui cree un objet et le modifie
class Mod2(Mod):
 
    #ici il faut surcharger __new__
    def __new__(cls,x,z):
        instance = Mod.__new__(cls,UnObjet(x))
        return instance
 
    def __init__(self,x,z):
 
        Mod.__init__(self)
        print('mod2')
 
    #d'autres propriétés ici
 
 
 
 
objet = Mod(UnObjet(5))
print(objet.y)
#foo
#mod
#7
objet = Mod2(8,3)
print(objet.y)
#foo
#mod
#10
y a-t-il une façon de faire ceci sans passer par __new__ ? Car les classes qui héritent de Mod doivent aussi surcharger __new__.
la seule solution qui me vient à l'esprit c'est de passer par une fonction qui retourne une instance.
qu'en pensez-vous ?

Merci.