2012-02-25 4 views
1

Итак, я пытаюсь научиться питоном и каждый раз, когда я отправляю вопрос здесь чувствует себя как поддающиеся ...Как создать подкласс в питоне, унаследованный от черепахи модуля

Я пытаюсь сделайте мой собственный класс черепахи.

import turtle 
class TurtleGTX(turtle.Turtle): 
    """My own version of turtle""" 
    def __init__(self): 
     pass 

my_turtle = TurtleGTX() 
my_turtle.forward(10) 

Дает Traceback: AttributeError: объект 'TurtleGTX' не имеет атрибута '_position'. Который я потом узнаю, это «частный vairable», который, согласно официальному учебнику python, могу калечить/переопределять в моем подклассе TurtleGTX. Как сделать это с помощью программы, такой как черепаха, кажется довольно сложной и подразумевает, что я не вижу более простого решения проблемы. В конце концов я узнал, и в этом был смысл, но я все равно хотел бы запустить его сообществом, чтобы узнать, есть ли элегантный способ создания подкласса черепахи. (Следующий шаг, чтобы ваша черепаха ведет себя отличается, то стандартная черепаха)

Так комментарий ниже заставило меня думать, что, возможно, я мог бы сделать это:

import turtle 
class TurtleGTX(turtle.Turtle): 
    """My own version of turtle""" 


my_turtle = TurtleGTX() 
my_turtle.forward(100) 

, какие фактические пробеги! Теперь я собираюсь посмотреть, что это заставляет меня ... что-то подсказывает мне, что я мог сделать шаг вперед на два шага назад, так как это означает, что я не смогу ничего инициализировать в моем подклассе ...

ответ

3

Округление ответ Игнасио и комментарий orokusaki ты, вероятно, должен написать что-то вроде

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) 
+0

Спасибо за помощь, я, возможно, неправильно понял вопрос, который задавал учебник, поскольку они никогда не вводили супер, * args или ** kwargs ... –

2

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

+0

Также обратите внимание, ваш __init__ необходимо принять те же аргументы, kwargs как родитель, и вы должны назвать супер() инициализации с args, kwargs, если вы не собираетесь переписывать интерфейс. – orokusaki