Il ne s'agit pas d'un ajout proche du bidouillage, décidé à la va vite, comme tu sembles le penser. Un propriété n'est rien d'autre qu'un objet qu'on appelle un descripteur de donnée, et les descripteurs sont au centre de tout le mécanisme des classes nouveau style.
Maintenant, en ce qui concerne l'élégance de la méthode, c'est comme les goûts et les couleurs... Personnellement, je suis impressionné par la cohérence du modèle objet de Python et la syntaxe proposée ne me gène pas outre-mesure:
1 2 3 4 5 6 7 8 9 10 11 12
|
// En C#
class MaClasse {
/* ... */
private _x;
public x {
get { return _x; }
set { _x = value; }
}
} |
ou
1 2 3 4 5 6 7 8 9 10
| # Son équivalent Python
class MaClasse(object):
def __init__(self, x):
self._x = x
# x propery definition
def getx(self): return self._x
def sety(self, value): self._x = value
x = properpy(getx, setx) |
Je trouve personnellement la manière pythonique plus explicite.
EDIT: Par ailleurs, il est facile d'automatiser la créations des propriétés avec un peu de métaprogrammation, mais ça c'est une autre histoire.
Thierry
Partager