OVH Cloud OVH Cloud

Attributs de classe calculés

15 réponses
Avatar
Alex Marandon
Bonjour,

Je n'ai pas trouvé dans Python 2.5 de façon de déclarer des attributs de
classe calculés. Ai-je mal cherché ?

J'ai imaginé les implémenter en lecture seule de cette manière:



class classproperty(object):
def __init__(self, func):
self.func = func

def __get__(self, instance, owner):
return self.func(owner)

class Foo(object):
@classproperty
def bar(cls):
return "Je suis un attribut de " + cls.__name__

print Foo.bar



Voyez-vous des problèmes potentiels avec cette implémentation ?

Merci.

5 réponses

1 2
Avatar
Bruno Desthuilliers
chris a écrit :
bonjour,

je debute en python



Alors je me permets quelques commentaires sur ton code, si tu n'y vois
pas d'inconvénients !-)

et ce probleme m'interresse
et j'avais voulu faire ceci

>>> class Vide:



A moins que tu n'ai une très bonne raison, utilises de préférence les
new-style class :

class Vide(object):

... pass
...
>>>
>>> A=Vide()



Les conventions de nommages (*très* importantes en Python) sont:

* classes : CamelCase
* pseudo constantes : ALL_UPPER_WITH_UNDESCORES
* tout le reste: all_lower_with_underscores

donc ici, s/A/a/

>>> A.toto='tutu'
>>> A.toto
'tutu'

pourquoi cela ne conviendrait pas ?



Ne conviendrait pas à quoi ??? Excuses-moi, mais je vois mal le rapport
avec la question de Alex.
Avatar
Bruno Desthuilliers
Alex Marandon a écrit :
chris wrote:
>>> class Vide:
... pass
...
>>>
>>> A=Vide()
>>> A.toto='tutu'
>>> A.toto
'tutu'

pourquoi cela ne conviendrait pas ?



Dans ton exemple ça convient parfaitement. Mais si A.toto change en
fonction de certaines conditions connues de A, tu peux vouloir faire en
sorte que A.toto sache se mettre à jour tout seul. Par exemple la valeur
de A.toto pourrait venir d'une base de données.



Très bonne explication de l'intérêt des attributs calculés. Mais dans le
code de Chris, il s'agit d'attributs d'instance, pas d'attributs de
classes.
Avatar
Alex Marandon
Bruno Desthuilliers wrote:
Alex Marandon a écrit :
chris wrote:
>>> class Vide:
... pass
...
>>>
>>> A=Vide()
>>> A.toto='tutu'
>>> A.toto
'tutu'

pourquoi cela ne conviendrait pas ?



Dans ton exemple ça convient parfaitement. Mais si A.toto change en
fonction de certaines conditions connues de A, tu peux vouloir faire
en sorte que A.toto sache se mettre à jour tout seul. Par exemple la
valeur de A.toto pourrait venir d'une base de données.



Très bonne explication de l'intérêt des attributs calculés. Mais dans le
code de Chris, il s'agit d'attributs d'instance, pas d'attributs de
classes.



Voila la preuve de la pertinance de ta remarque sur les conventions de
nommage. Instinctivement, pour moi A était une classe !-)
Avatar
chris
Bruno Desthuilliers a écrit :
chris a écrit :
bonjour,

je debute en python



Alors je me permets quelques commentaires sur ton code, si tu n'y vois
pas d'inconvénients !-)

et ce probleme m'interresse
et j'avais voulu faire ceci

>>> class Vide:



A moins que tu n'ai une très bonne raison, utilises de préférence les
new-style class :

class Vide(object):

... pass
...
>>>
>>> A=Vide()



Les conventions de nommages (*très* importantes en Python) sont:

* classes : CamelCase
* pseudo constantes : ALL_UPPER_WITH_UNDESCORES
* tout le reste: all_lower_with_underscores

donc ici, s/A/a/

>>> A.toto='tutu'
>>> A.toto
'tutu'

pourquoi cela ne conviendrait pas ?



Ne conviendrait pas à quoi ??? Excuses-moi, mais je vois mal le rapport
avec la question de Alex.




OK ok j'ai repondu un peu vite sans lancer pylint sur les news group :)
mais il s'agissait de l'idée

A+
chris
Avatar
chris
Bruno Desthuilliers a écrit :
Alex Marandon a écrit :
chris wrote:
>>> class Vide:
... pass
...
>>>
>>> A=Vide()
>>> A.toto='tutu'
>>> A.toto
'tutu'

pourquoi cela ne conviendrait pas ?



Dans ton exemple ça convient parfaitement. Mais si A.toto change en
fonction de certaines conditions connues de A, tu peux vouloir faire
en sorte que A.toto sache se mettre à jour tout seul. Par exemple la
valeur de A.toto pourrait venir d'une base de données.



Très bonne explication de l'intérêt des attributs calculés. Mais dans le
code de Chris, il s'agit d'attributs d'instance, pas d'attributs de
classes.



C'est d'ailleurs IMHO le seul inconvénient (mais qui me convient très
bien) il s'agit d'instance et nom d'attribut de classe
d'ailleurs je n'avait qu'a lire le titre !

A+
chris
1 2