|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre confirmé
![]() Inscription : juin 2006 Messages : 570 ![]() |
Bonjour,
je sais que la fonction __getattribute__ doit être utilisée avec précaution, mais j'aurais besoin de l'écraser dans l'un de mes objets. Mais l'écraser que dans certain cas, donc pas à la construction de mon objet car cette decision se se fait par le model. Je tente donc de faire a = MaClass() a.__getattribute__ = lambda name: mafunction(name) Mais c'est toujours le __getattribute__ de base qui est utilisé. Alors je peux faire ca: MaClass.__getattribute__ = lambda self, name: mafunction(self, name) Mais j'aimerais éviter si possible. Est ce qu'il y a un moyen d'overrider le getattribute on the fly, ou alors une fois l'objet créé cela ne peut plus bouger ? |
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé
![]() Patrice BLANGARINTechnicien Help Desk, maintenance, réseau, système et + Inscription : juin 2006 Messages : 2 613 ![]() |
Bonjour,
Une solution comme ceci ? Code :
__________________
Merci d'utiliser le forum pour les questions techniques. |
||
|
|
00
|
|
|
#3 |
|
Membre confirmé
![]() Inscription : juin 2006 Messages : 570 ![]() |
Ca marcherait aussi mais j'aurais preferé une solution plus dynamique. La nouvelle class ne se fera pas dans le domaine model mais au niveau datamapper.
Mais tant pi je vais partir la dessus, merci bien ! |
|
|
00
|
|
|
#4 | ||
|
Expert Confirmé
![]() Patrice BLANGARINTechnicien Help Desk, maintenance, réseau, système et + Inscription : juin 2006 Messages : 2 613 ![]() |
Bonsoir,
En fait je n'ai pas dus comprendre la différence entre a.__getattribute__ = lambda name: mafunction(name) et bar.__class__ = Bar : Que cela soit une fonction ou une classe que vous déclariez qu'importe ? Ceci dit si vous voulez du 'plus on the fly' vous pouvez utiliser type Code :
La solution de la classe dérivée me semble le plus propre mais il y a sans doute d'autres réponses. Cela correspond à la question ou je fais fausse route ? @+
__________________
Merci d'utiliser le forum pour les questions techniques. |
||
|
|
00
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 696 ![]() |
Salut,
__getattribute__ a le défaut d'être appelé pour accéder à n'importe quel attribut d'une l'instance (y compris les méthodes). Si le but est de faire un "datamapper", il est plus "simple" de passer par des "descriptors": ils sont plus sélectifs. - W
__________________
Architectures Post-Modernes |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com