1
votes

L'héritage d'une classe d'un autre fichier produit des erreurs

J'ai écrit deux classes simples en python. ma classe parente qui est placée dans un fichier appelé "class_turtle" est:

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

Ma classe enfant est placée sous un fichier appelé "class_interpreter" utilise la classe LTurtle. voici ma classe 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()

J'ai également mis le fichier init .py dans le dossier. Je ne sais pas où je dois déclarer line_width à ma classe LTurtle et j'obtiens l'erreur suivante:

    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")


0 commentaires

3 Réponses :


1
votes

Vous devez appeler self.forward (50) au lieu de LTurtle.forward(50)


0 commentaires

-4
votes

utilisez super () qui est une manière pythonique lors de l'héritage.

Au lieu d'écrire

super().forward(50)

changez-le en

 LTurtle.forward(50)


0 commentaires

1
votes

Vous avez appelé la méthode forward () sur le nom de la classe, ce qui ne peut être fait que si la méthode est statique. Puisque la méthode forward () est une méthode d'instance, vous avez besoin d'un objet pour l'appeler.

L'objet my_interpreter est un objet de la classe Interpreter qui est une sous-classe de LTurtle . Par conséquent, utiliser self ici fait référence à l'objet my_interpreter et hérite de la classe LTurtle.

Par conséquent, vous pouvez appeler les méthodes de la classe LTurtle avec self comme suit:

def parser(self):
    for char in self.string:
        if char == 'F':
            self.forward(50)
        else:
            self.rest()

Cela résoudra votre problème.


0 commentaires