Re: [問題] pygtk繼承問題 and __init(self)__

看板Python作者 (doki)時間15年前 (2009/10/28 10:54), 編輯推噓1(104)
留言5則, 2人參與, 最新討論串2/2 (看更多)
原諒我自問自答的灌水行為... //---------------------------------------------------------- 原來是當我寫了 class MyPanel(gtk.DrawingArea): def __init__(self): # do something gtk.DrawingArea的constructor (or __init__()?)並沒有被呼叫到... (我比較熟的是c++,所以python的繼承體系的instance機制很不熟...) 所以我改成這樣: class MyPanel(gtk.DrawingArea): def __init__(self): super(MyPanel, self).__init__() # do something 要明確指名呼叫super class的__init__()即可 我也不知道這樣的做法是不是正統的方式 還請各為先進不吝指教 ============================================== 我是python教的新教徒XD ※ 引述《dokinkon (doki)》之銘言: : 我是一個python新手,如果問了笨問題還請板上先進多包容 : 最近在學習PyGtk + PyCairo想提高開發GTK+的速度 : 由於某一個widget必須能後畫出一些特別圖案 : 因此我照著PyCairo的教學網頁上寫了一個class 繼承自 pygtk的 gtk.DrawingArea如下 : class MyPanel(gtk.DrawingArea): : 問題來了,當我在這個class加入__init__(self)這個函式時 : pygtk就會跟我抱怨: : GtkWarning: gtk_widget_show: assertion 'GTK_IS_WIDGET(widget)' failed : widget.show() : 但是沒有__init__時,一切又正常 : 想請教一下是我有什麼環節疏忽了嗎? : 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.128.139.157

10/28 13:25, , 1F
印象中是 加gtk.DrawingArea.__init__(self,.......)
10/28 13:25, 1F

10/28 13:44, , 2F
這是舊的作法。new style class 使用 super 來做
10/28 13:44, 2F

10/28 13:44, , 3F
cooperative super class 會比較好。
10/28 13:44, 3F

10/28 13:45, , 4F
call
10/28 13:45, 4F

10/28 14:11, , 5F
10/28 14:11, 5F
文章代碼(AID): #1Avx9Rqp (Python)
文章代碼(AID): #1Avx9Rqp (Python)