J'essaie d'écrire du code qui me permette de transmettre un nombre qui augmente ou diminue dans ma classe Square. Lors de la compilation du code, je reçois cette erreur:
>>> print(a_square.s1) 100 >>> a_square.change_size(200)
Code entré:
class Square(): def __init__(self,s1): self.s1=s1 def calculate_perimeter(self): return self.s1*4 def change_size(self,new_size): self.s1+=new_size a_square= Square(100)
Interaction:
AttributeError: 'Square' object has no attribute 'change_size'.
3 Réponses :
Le code que vous avez publié ci-dessus a-t-il une indentation identique à votre code réel? Si tel est le cas, le problème est probablement dû au fait qu'en Python, l'indentation est vraiment importante. C'est-à-dire:
class Square(): def init(self, s1): self.s1 = s1 . . .
n'est pas la même chose que
class Square(): def init(self, s1): self.s1 = s1 . . .
Vous pouvez voir une explication plus longue et plus d'exemples dans le Guide de style PEP8 .
Veuillez changer l'indentation,
a_square.s1 100 a_square.change_size(100) 200
Résultat:
class Square(): def __init__(self,s1): self.s1=s1 def calculate_perimeter(self): return self.s1*4 def change_size(self,new_size): self.s1+=new_size return self.s1 a_square= Square(100)
S'il vous plaît laissez-moi savoir si vous avez des questions, je serais très heureux de vous aider.
Ok, je viens d'essayer et cela semble avoir fonctionné. Merci beaucoup!
Sûr. Aucun problème. Si cela vous aide, veuillez marquer cette réponse comme bonne réponse.
Peu de choses:
1) utilisez les blocs de formatage du code pour vous aider à rendre votre code plus lisible
2) supprimez le + = lorsque vous modifiez la taille de l'attribut car un opérateur d'affectation augmentée ajoutera la valeur à la valeur existante
3) établir l'attribut s1 avant de l'utiliser dans la classe
Essayez quelque chose comme:
class Square(): s1 = 0 def init(self,s1): self.s1=s1 def calculate_perimeter(self): return self.s1*4 def change_size(self,new_size): self.s1 = new_size a_square = Square() print(a_square.calculate_perimeter()) a_square.change_size(5) print(a_square.calculate_perimeter())
J'ai extrait votre code saisi à la main (ce n'est pas un moyen fiable de créer des classes) lorsque vous l'avez publié. À partir de là, le problème est évident:
change_size
est en dehors deSquare
. Vous devez corriger votre indentation. Je recommande de mettre ce code dans un fichier.