Наследовать класс из другого файла, производить ошибки - PullRequest
0 голосов
/ 01 января 2019

Я написал два простых класса на 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")

Мой дочерний класс, помещенный в файл с именем "class_interpreter", использует класс LTurtle.Вот мой класс переводчика:

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.Я не знаю, где я должен объявить line_width для моего класса LTurtle, и я получаю следующую ошибку:

TypeError: forward() missing 1 required positional argument: 'step_size'

Ответы [ 3 ]

0 голосов
/ 01 января 2019

используйте super (), который является питоническим способом при выполнении наследования.

Вместо записи

 LTurtle.forward(50)

измените его на

super().forward(50)

Аналогично в блоке elseа также.

0 голосов
/ 01 января 2019

Вы вызвали метод 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()

Это решит вашу проблему.

0 голосов
/ 01 января 2019

Вы должны позвонить self.forward(50) вместо LTurtle.forward(50)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...