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.
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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, 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...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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' >>>
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.
Partager