Come creare una sottoclasse in Python ereditato dal modulo Turtle
-
12-11-2019 - |
Domanda
Quindi, sto cercando di imparare Python e ogni volta che poso una domanda qui mi sembra di arrendersi ...
Sto cercando di fare la mia classe di tartaruga. Turtle.
import turtle
class TurtleGTX(turtle.Turtle):
"""My own version of turtle"""
def __init__(self):
pass
my_turtle = TurtleGTX()
my_turtle.forward(10)
Dà il traceback: AttributeError: L'oggetto "TurtleGtx" non ha attributo "_position". Che allora imparo è un "vairable privato" che secondo il tutorial di Python officale posso mangle/sovrascrivere nella mia sottoclasse Turtlegtx. Come farlo con un programma grande come la tartaruga sembra piuttosto difficile e implica che mi manca una soluzione più semplice al problema. Alla fine ho imparato e questo era il punto, ma vorrei comunque eseguirlo dalla comunità per vedere se esiste un modo elegante per creare una sottoclasse di tartaruga. (Il prossimo passo è che la tua tartaruga si comporti diversa dalla tartaruga standard)
Quindi un commento qui sotto mi ha fatto pensare che forse potrei farlo:
import turtle
class TurtleGTX(turtle.Turtle):
"""My own version of turtle"""
my_turtle = TurtleGTX()
my_turtle.forward(100)
Quali correzioni reali! Ora vedrò dove mi porta ... qualcosa mi dice che avrei potuto fare un passo avanti a due passo indietro perché questo significa che non sarò in grado di inizializzare nulla sulla mia sottoclasse ...
Soluzione
Arrotonda la risposta di Ignacio e il commento di Orokusaki probabilmente dovresti scrivere qualcosa di simile
import turtle
class TurtleGTX(turtle.Turtle):
"""My own version of turtle"""
def __init__(self,*args,**kwargs):
super(TurtleGTX,self).__init__(*args,**kwargs)
print("Time for my GTX turtle!")
my_turtle = TurtleGTX()
my_turtle.forward(100)
Altri suggerimenti
Se ridefinite un metodo (come __init__()
) In una classe figlio quindi è tua responsabilità chiamare il metodo del genitore per rispettare il comportamento del genitore.