Problème d'attributs privés dans une méthode publique!
Bonjour,
J'ai commencé le python il y a très peu de temps car je suis entré dans un BTS SN (Système Numérique) et que j'avais envie de m'avancer un peu tout seul.
On m'a prêté un LINUX Mag Hors-série n°77 "Et maintenant j'apprends la PROGRAMMATION ORIENTEE OBJET ...en 6 jours".
Je bloque au 2eme/3eme, j'suis pas une flèche.
Je vous expose le code, puis mon problème:
Je dois créer un jeu de carte. Donc je créé une première classe, qui va être la Carte.
Code:
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
| class Carte:
#Les différentes valeurs que peut avoir une carte
couleurs = ("Coeur", "Pique", "Trèfle", "Carreau")
valeurs = (None, None, "Deux", "Trois", "Quatre", "Cinq", "Six", "Sept", "Huit", "Neuf", "Dix", "Valet", "Dame", "Roi", "As")
#On initialise la classe, une carte sans attributs donnés sera Roi de Trèfle.
def __init__(self, val=13, coul=3):
while val < 2 or val > 14:
print("Erreur : La valeur d'une carte doit être comprise entre 2 et 14. Quelle valeur ?")
val = int(input())
while coul < 0 or coul > 3:
print("Erreur : La couleur d'une carte doit être comprise entre 0 et 3. Quelle couleur ?")
coul = int(input())
self.__couleur = coul
self.__valeur = val
def __getValeur(self):
print("hue")
return self.__valeur
def __setValeur(self, val):
print("hue1")
self.__valeur = val
# On passe par une méthode publique pour accéder à des attributs privés
valeur = property(__getValeur, __setValeur)
def __getCouleur(self):
print("hue")
return self.__couleur
def __setCouleur(self):
print("hue1")
self.__couleur = couleur
couleur = property(__getCouleur, __setCouleur)
def __str__(self):
return str(Carte.valeurs[self.__valeur] + " de " + Carte.couleurs[self.__couleur]) |
Alors déjà ici j'ai un problème avec le principe de méthode publique. Quand j'écris le code de cette façon, tout marche. Mais si j'ai le malheur par exemple de changer de place les deux fonctions dans la property de valeur (ou de couleur), j'ai le droit à cette erreur :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
>>> from Carte import Carte
>>> c=Carte()
>>> c.valeur = 5
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: __getValeur() takes 1 positional argument but 2 were given
>>> print(c.valeur)
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: __setValeur() missing 1 required positional argument : 'val'
>>> |
Alors, je sais qu'il essaie de rentrer dans la mauvaise fonction et il râle parce qu'il lui manque un truc ou qu'il y en a trop. Mais je ne sais pas comment régler le problème...
Et ça n'est que le début! Mais déjà, je pense que si on arrive à régler ce problème précisément, ça règlera le suivant étant donné que je retrouve la même erreur pour le même problème (l'attribut privé est __deck et en fait je veux ajouter une carte dans un deck vide. Il me dit aussi qu'il " missing 1 required positional argument : 'carte' ". Seulement le problème est un peu plus complexe parce qu'une autre erreur survient après. Mais on verra plus tard. Si vous décidez de m'aider, bien sûr.