2012-02-25 30 views
1

所以繼承,我努力學習Python和每一次我在這裏發表一個問題的時候,感覺就像給在...如何在Python中創建一個子類,它是從烏龜模塊

我想做我自己的烏龜班。烏龜。

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'。然後,我學習的是一個「私人可寬恕」,根據官方python教程,我可以在我的子類TurtleGTX中打亂/重寫。如何用像烏龜一樣大的程序來做到這一點似乎相當困難,並暗示我錯過了一個更簡單的解決方案。最後,我瞭解到了這一點,但我仍然希望由社區運行它,看看是否有一種優雅的方式來創建一個turtle.Turtle的子類。 (下一步是讓你的龜的行爲不同,那麼標準龜)

所以評論下面讓我覺得,也許我可以這樣做:

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 ... – 2012-02-25 14:39:43

2

如果您在子類中重新定義方法(例如__init__()),則有責任調用父類的方法以使父級的行爲得到尊重。

+0

另外請注意,您的__init__需要接受相同的指定參數時,kwargs作爲父母,你需要調用父類的()初始化與args,kwargs,除非你打算重寫界面。 – orokusaki 2012-02-25 05:26:00