【问题标题】:Error in writing a class编写类时出错
【发布时间】:2010-04-22 14:20:56
【问题描述】:

我正在通过http://www.sthurlow.com/python/lesson08/ 的在线教程运行,并且我相信我至少在某种程度上了解类在 python 中的工作原理,但是当我运行此代码时:

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

我收到此错误:

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

任何帮助都会很棒

谢谢

理查德

【问题讨论】:

  • 我不是 python 专家(所以我帮不上忙),但我建议在编辑器中为您的代码使用代码块,尤其是因为 Python 依赖于缩进。然后人们将能够准确地看到你可能做错了什么。
  • @Richie: 啊,很好 :) 希望我能做到。

标签: python class


【解决方案1】:

你需要缩进最后一行。

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

应该是

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

【讨论】:

  • 感谢您这么快的回复。这是我第一次使用stackoverflow。我已经看到,这将是一个值得参与的伟大社区。谢谢大家。
  • @Richard,如果此答案已回答您的问题,建议您单击答案框旁边的箭头。这可以确保任何其他人来到该站点时遇到相同的问题并快速确定哪个有效。
【解决方案2】:

你的代码的最后一部分是错误的,

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

注意缩进,这在 Python 中很重要。就你现在所拥有的而言,意味着self.y = self.y * scale 不在scaleSize 方法内部,并且关键字self 没有为你的Shape 类定义。

你需要做的是正确缩进,

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

【讨论】:

    【解决方案3】:

    指示的行有错误的缩进级别,所以它不在scaleSize() 方法中。

    【讨论】:

      【解决方案4】:

      您需要将第 17 行与第 16 行对齐

      你有:

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

      必须是:

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

      这就是 python 知道它们属于同一个方法的方式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-19
        • 2017-09-28
        • 1970-01-01
        • 1970-01-01
        • 2011-11-19
        • 2016-12-08
        • 1970-01-01
        • 2015-10-23
        相关资源
        最近更新 更多