(我開發在Python 3.1,所以如果有一些閃亮的新3.X的功能,我應該知道這一點,請讓我知道!)子類查找
我有一個類(我們」我只是稱之爲「數據包」),它作爲一個代表傳統客戶機 - 服務器協議中的幾十個數據包類型中的每一個的子類的父代,我無法控制它。 (這些數據包通常具有非常不同的行爲,所以我只是給他們分配了他們自己的類,以使我的生活更輕鬆。)
當收到一個數據包時,我會有一個簡單的「dispatch」函數,確定類型,然後將其交給知道如何處理它的類。
我做不是想手工維護查找表 - 它不雅,只是要求麻煩。相反,我想在運行時建立的表通過檢查所有數據包的子類,這將有類變量指定的是一包什麼類型它們對應,如:
class Login(Packet):
type_id = 0x01
我想,當然,關於迭代通過object.__subclasses__()
,但我發現在這種情況下使用它的安全性和適當性方面略有不同,包括它是特定於實現的並且可能無法在CPython以外的地方使用,並且可能會從CPython中消失未來。我太偏執了嗎? __subclassess__現在是否被認爲是該語言的「真正」部分?
如果不是,那麼採用什麼樣的「pythonic」方法呢?
你是正確的,'__subclasses__'是不是有供您使用,它是一個實現細節 – 2009-10-20 02:42:59
@gnibbler,無論給你的想法?網址。我們完全打算製作'__subclasses__'作爲Python語言的一部分,我想把任何網站都說成是小的碎片...... ;-)。 – 2009-10-20 03:04:01
@Alex,也許我過時了,我以爲'__subclasses__'具有不可能被刪除的狀態。很高興看到它成爲語言的官方部分 – 2009-10-20 03:11:43