0

我是 python 新手,我正在终端练习编写课程

我写了以下

>>> class Calculator:
...     def calculate(self,expression):
...         self.value=eval(expression)
...  class Talker:

一旦我class Talker:按上述方式输入,
我就会收到以下错误

  File "<stdin>", line 4
    class Talker:
                ^
IndentationError: unindent does not match any outer indentation level

我无法理解为什么会出现这个缩进错误?我该如何从这里开始。
根据更新
,我纠正了错误,现在我写了以下内容

 class Calculator:
...     def calculate(self,evaluate):
...         self.value=eval(expression)
...     class Talker:
...         def talk(self):
...             print 'Hi, my value is ', self.value
...         class TalkingCalculator(Calculator,Talker):
...             pass
... 

现在我得到了错误

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in Calculator
  File "<stdin>", line 7, in Talker
NameError: name 'Calculator' is not defined

这个错误是什么我在这里错过了什么?

4

2 回答 2

2

您已经缩进了您的Talker类以放入Calculator类内部,但与Calculator类方法的缩进不一致。空格的数量需要保持一致。

嵌套类在定义它们的地方的范围内是本地的,并通过缩进进行控制。子类是继承超类属性的类。

看来您不想Talker成为 的子类或嵌套类Calculator,但要TalkingCalculator成为 and 的子CalculatorTalker

>>> class Calculator(object):
...     def calculate(self,evaluate):
...         self.value=eval(expression)
...
>>> class Talker(object):
...     def talk(self):
...         print 'Hi, my value is ', self.value
...
>>> class TalkingCalculator(Calculator, Talker):
...     pass
于 2013-06-03T15:10:10.907 回答
1

正如 Daniel 指出的那样,假设您希望 Talker 成为一个单独的类,您需要保持它与您的第一个“class Calculator:”行相同的缩进,这意味着“...”和“class Talker:”之间没有空格。

看一下这个关于python缩进的更深入的讨论。http://www.diveintopython.net/getting_to_know_python/indenting_code.html

于 2013-06-03T15:10:43.430 回答