2010-04-22 9 views
1

Je suis en cours d'exécution à travers un tutoriel en ligne à http://www.sthurlow.com/python/lesson08/ et je crois que je comprends comment les classes en Python, au moins dans une certaine mesure, mais quand je lance ce code:erreur par écrit une classe

class Shape: 
    def __init__(self,x,y): 
     self.x = x 
     self.y = y 
    description = "This shape has not been described yet" 
    author = "Nobody has claimed to make this shape yet" 
    def area(self): 
     return self.x * self.y 
    def perimeter(self): 
     return 2 * self.x + 2 * self.y 
    def describe(self,text): 
     self.description = text 
    def authorName(self,text): 
     self.author = text 
    def scaleSize(self,scale): 
     self.x = self.x * scale 
    self.y = self.y * scale 

Je reçois ce erreur:

Traceback (most recent call last): 
    File "Y:/python/Shape.py", line 1, in -toplevel- 
    class Shape: 
    File "Y:/python/Shape.py", line 17, in Shape 
    self.y = self.y * scale 
NameError: name 'self' is not defined 

Toute aide serait super

Merci

Richard

+0

Je ne suis pas un expert python (donc je ne peux pas vous aider), mais je vous recommande d'utiliser le bloc de code dans l'éditeur pour votre code, d'autant plus que Python repose sur l'indentation. Ensuite, les gens pourront voir exactement ce que vous pourriez faire de mal. – Dave

+0

@Richie: ahh, sympa :) j'aurais aimé pouvoir faire ça. – Dave

Répondre

10

Vous devez mettre en retrait la dernière ligne.

def scaleSize(self,scale): 
    self.x = self.x * scale 
self.y = self.y * scale 

devrait être

def scaleSize(self,scale): 
    self.x = self.x * scale 
    self.y = self.y * scale 
+0

Merci pour cette réponse rapide. C'est la première fois que j'ai utilisé stackoverflow. Je peux déjà voir que cela va être une grande communauté à participer. Merci à tous. – Richard

+0

@Richard, si cette réponse a répondu à votre question, il vous a suggéré de cliquer sur la flèche à côté de la case de réponse. Cela garantit à toute personne qui vient sur le site avec le même problème et identifier rapidement celui qui fonctionne. –

1

La ligne indiquée a le niveau de retrait mauvais, il est donc pas dans la méthode scaleSize().

3

La dernière partie de votre code est erroné,

def scaleSize(self,scale): 
    self.x = self.x * scale 
self.y = self.y * scale 

Notez l'indentation, ce qui est important en Python. Par ce que vous avez maintenant, signifie self.y = self.y * scale n'est pas à l'intérieur la méthode scaleSize et le mot-clé self est indéfini pour votre classe Shape.

Ce que vous devez faire est correctement tiret,

def scaleSize(self,scale): 
    self.x = self.x * scale 
    self.y = self.y * scale 
1

Vous devez aligner la ligne 17 avec la ligne 16

Vous avez:

def scaleSize(self,scale): 
    self.x = self.x * scale 
self.y = self.y * scale 

doit être:

def scaleSize(self,scale): 
    self.x = self.x * scale 
    self.y = self.y * scale 

Voilà comment python k ils appartiennent à la même méthode.

Questions connexes