我用python写了两个简单的类。我放在名为“ class_turtle”的文件中的父类是:
class LTurtle:
def __init__(self, line_width):
self.line_width = line_width
def forward(self, step_size):
print(f"Move Forward = {step_size}")
def rest(self):
print(f"Turtle is resting right now")
我的子类放在使用LTurtle类的名为“ class_interpreter”的文件下。这是我的口译课:
from class_turtle import LTurtle
class Interpreter(LTurtle):
def __init__(self, axiom):
self.axiom = axiom
self.string = axiom
def parser(self):
for char in self.string:
if char == 'F':
LTurtle.forward(50)
else:
LTurtle.rest()
if __name__ == '__main__':
my_interpreter = Interpreter("F")
my_interpreter.parser()
我还将 init .py文件放在文件夹中。我不知道应该在哪里向LTurtle类声明line_width,并且出现以下错误:
TypeError: forward() missing 1 required positional argument: 'step_size'
答案 0 :(得分:1)
您应该致电self.forward(50)
而不是LTurtle.forward(50)
答案 1 :(得分:1)
您已经在类名称上调用了forward()
方法,只有在该方法为静态方法时才可以执行。由于forward()
方法是一个实例方法,因此需要一个对象来调用它。
对象my_interpreter
是类Interpreter
的对象,该类是LTurtle
的子类。因此,此处使用self
引用对象my_interpreter
并继承类LTurtle
。
因此,您可以使用LTurtle
调用类self
的方法,如下所示:
def parser(self):
for char in self.string:
if char == 'F':
self.forward(50)
else:
self.rest()
这将解决您的问题。
答案 2 :(得分:-4)
使用super()是继承时的一种pythonic方式。
代替写作
LTurtle.forward(50)
将其更改为
super().forward(50)
同样在else块中。