J'étudie l'OO avec python... et je m'interroge sur un point.
Comment obliger le programmeur à passer par les fonctions de classes, et
lui interdire de modifie les valeurs directement, comme dans cet exemple ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
J.Pierre Pourrez
Le Sun, 10 Apr 2005 14:19:18 +0200, David Josty a écrit :
Bonjour,
J'étudie l'OO avec python... et je m'interroge sur un point. Comment obliger le programmeur à passer par les fonctions de classes, et lui interdire de modifie les valeurs directement, comme dans cet exemple ?
# Exemple eauChaude = Temperature(310) print eauChaude.Afficher() eauChaude.valeur print eauChaude.Afficher()
La protection n'est pas aussi efficace que en Delphi , C ou Java. C'est plus une convention. Néammoins un "dir(temperature)" n'affichera pas cet attribut.
Cordialement Jean-Pierre
Le Sun, 10 Apr 2005 14:19:18 +0200, David Josty a écrit :
Bonjour,
J'étudie l'OO avec python... et je m'interroge sur un point. Comment
obliger le programmeur à passer par les fonctions de classes, et lui
interdire de modifie les valeurs directement, comme dans cet exemple ?
# Exemple eauChaude = Temperature(310)
print eauChaude.Afficher()
eauChaude.valeur
print eauChaude.Afficher()
La protection n'est pas aussi efficace que en Delphi , C ou Java.
C'est plus une convention.
Néammoins un "dir(temperature)" n'affichera pas cet attribut.
Le Sun, 10 Apr 2005 14:19:18 +0200, David Josty a écrit :
Bonjour,
J'étudie l'OO avec python... et je m'interroge sur un point. Comment obliger le programmeur à passer par les fonctions de classes, et lui interdire de modifie les valeurs directement, comme dans cet exemple ?
# Exemple eauChaude = Temperature(310) print eauChaude.Afficher() eauChaude.valeur print eauChaude.Afficher()
La protection n'est pas aussi efficace que en Delphi , C ou Java. C'est plus une convention. Néammoins un "dir(temperature)" n'affichera pas cet attribut.
Cordialement Jean-Pierre
Hervé Cauwelier
self._valeur = lavaleur
En fait, c'est deux soulignés qu'il faut mais ça ne fait que transformer la variable en « _<classe>__attribut », ici « _Temperature__valeur ».
Je pense que pour des raisons d'introspection, les attributs ne sont jamais vraiment cachés. Si un programmeur veut jouer au plus malin, c'est son problème.
-- Hervé Cauwelier http://www.oursours.net/
self._valeur = lavaleur
En fait, c'est deux soulignés qu'il faut mais ça ne fait que transformer
la variable en « _<classe>__attribut », ici « _Temperature__valeur ».
Je pense que pour des raisons d'introspection, les attributs ne sont
jamais vraiment cachés. Si un programmeur veut jouer au plus malin,
c'est son problème.
En fait, c'est deux soulignés qu'il faut mais ça ne fait que transformer la variable en « _<classe>__attribut », ici « _Temperature__valeur ».
Je pense que pour des raisons d'introspection, les attributs ne sont jamais vraiment cachés. Si un programmeur veut jouer au plus malin, c'est son problème.
-- Hervé Cauwelier http://www.oursours.net/
Gilles Lenfant
Bonjour,
J'étudie l'OO avec python... et je m'interroge sur un point. Comment obliger le programmeur à passer par les fonctions de classes, et lui interdire de modifie les valeurs directement, comme dans cet exemple ?
def setValeur(self, valeur): if type(valeur) is int: self.__valeur = valeur else: raise ValueError("%s n'est pas une température" % str(valeur))
def getValeur(self): return __valeur
valeur = property(getValeur, setValeur, "Valeur de la temperature")
Bonjour,
J'étudie l'OO avec python... et je m'interroge sur un point.
Comment obliger le programmeur à passer par les fonctions de classes, et
lui interdire de modifie les valeurs directement, comme dans cet exemple ?
J'étudie l'OO avec python... et je m'interroge sur un point. Comment obliger le programmeur à passer par les fonctions de classes, et lui interdire de modifie les valeurs directement, comme dans cet exemple ?
def setValeur(self, valeur): if type(valeur) is int: self.__valeur = valeur else: raise ValueError("%s n'est pas une température" % str(valeur))
def getValeur(self): return __valeur
valeur = property(getValeur, setValeur, "Valeur de la temperature")
bruno modulix
David Josty wrote:
Bonjour,
J'étudie l'OO avec python... et je m'interroge sur un point. Comment obliger le programmeur à passer par les fonctions de classes, et lui interdire de modifie les valeurs directement, comme dans cet exemple ?
Quel est le cas d'utilisation ?
Si c'est parce qu'il doit y avoir des traitements suite à la mise à jour de la valeur de l'attribut, utilise des propriétés (cf le post de Gilles).
Si c'est juste pour signaler au développeur que l'attribut ne fait pas partie de l'API, la convention est de mettre un _ devant le nom. Tout programmeur Python comprendra. Ca n'empêchera personne d'y accéder directement, mais là ce n'est plus ton problème.
-- bruno desthuilliers python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for p in ''.split('@')])"
David Josty wrote:
Bonjour,
J'étudie l'OO avec python... et je m'interroge sur un point.
Comment obliger le programmeur à passer par les fonctions de classes, et
lui interdire de modifie les valeurs directement, comme dans cet exemple ?
Quel est le cas d'utilisation ?
Si c'est parce qu'il doit y avoir des traitements suite à la mise à jour
de la valeur de l'attribut, utilise des propriétés (cf le post de Gilles).
Si c'est juste pour signaler au développeur que l'attribut ne fait pas
partie de l'API, la convention est de mettre un _ devant le nom. Tout
programmeur Python comprendra. Ca n'empêchera personne d'y accéder
directement, mais là ce n'est plus ton problème.
--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in 'onurb@xiludom.gro'.split('@')])"
J'étudie l'OO avec python... et je m'interroge sur un point. Comment obliger le programmeur à passer par les fonctions de classes, et lui interdire de modifie les valeurs directement, comme dans cet exemple ?
Quel est le cas d'utilisation ?
Si c'est parce qu'il doit y avoir des traitements suite à la mise à jour de la valeur de l'attribut, utilise des propriétés (cf le post de Gilles).
Si c'est juste pour signaler au développeur que l'attribut ne fait pas partie de l'API, la convention est de mettre un _ devant le nom. Tout programmeur Python comprendra. Ca n'empêchera personne d'y accéder directement, mais là ce n'est plus ton problème.
-- bruno desthuilliers python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for p in ''.split('@')])"