[問題] 關於override的繼承問題

看板Python作者 (@.@)時間9年前 (2016/02/08 21:47), 編輯推噓1(109)
留言10則, 5人參與, 最新討論串1/1
我看書看到一個類似如下的程式碼 class A(): def __next__(self): return 3 def __iter__(self): return self class B(): pass a = A() b = B() next(a) next(b) #error ------------------------------------------- 在我的理解裡,如果class A繼承自collections.abc.Iterable及Iterator則可以 override底下的方法__iter__及__next__,但我的A並無註明有繼承他們,為何我 還可以override呢? 我的class B是拿來試驗如果沒有寫__next__及__iter__則使用iter及next時會告 訴我並非Iterable而出錯 我以為如果宣告class時後面括號沒寫父類別就只會繼承object,但object裡也沒 有attribute __next__ 及__iter__呀? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.73.11.209 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1454939251.A.E8C.html

02/08 23:13, , 1F
...取同樣的名字不行嗎?
02/08 23:13, 1F

02/08 23:59, , 2F
Python 判斷是否 iterable 的根據是 dock-typing, 不是
02/08 23:59, 2F

02/09 00:00, , 3F
(打錯字, duck) 靠實際的繼承關係; 即使不繼承相關 abc
02/09 00:00, 3F

02/09 00:01, , 4F
只要有合適的 magic method 就可以達到大部分的效果
02/09 00:01, 4F

02/09 00:02, , 5F
abc 只是方便, 在功能上沒有任何作用
02/09 00:02, 5F

02/09 02:12, , 6F
印象中,括號沒寫父類別不一定會繼承object,最好還是寫吧
02/09 02:12, 6F

02/09 02:24, , 7F
我再去研讀一下duck-typing的相關資料
02/09 02:24, 7F

02/14 11:19, , 8F
ABC主要是給IDE方便看的,實際上無用
02/14 11:19, 8F

02/14 18:22, , 9F
不盡然, 它會檢查一些東西 ^^^^^^^^^^
02/14 18:22, 9F

02/14 18:23, , 10F
例如繼承 Mapping 卻沒實作 __getitem__ 會 runtime err
02/14 18:23, 10F
文章代碼(AID): #1Mk9npwC (Python)
文章代碼(AID): #1Mk9npwC (Python)