从另一个文件继承一个类会产生错误

时间:2019-01-01 14:26:24

标签: python inheritance

我用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'

3 个答案:

答案 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块中。