Python中的動態類

2021-09-07 13:16:55 字數 907 閱讀 6412

有這樣乙個需求,我有segmentreaderpostagreaderconllreader這三個reader,他們都繼承於乙個reader類。在程式執行中,由使用者通過segmentpostagconll決定讀入哪一種資料,所以xreader的例項化也由使用者決定。當然,我們可以寫一連串的if判斷,但是這往往不夠美觀。這裡有乙個python動態建立類的問題。

python中有個一函式globals()返回當前全域性的符號表,如果已經import了這三個類,他們就會出現在全域性的符號表中。

from corpusproc.io import segmentreader, postagreader, conllreader def createobject(classname, * args): cls = globals()[classname] if isinstance(cls, type) and isinstance(args[0], file): return cls(args[0]) else: raise exception("no such class") 

測試一下

format = "segment"

reader = createobject(format[0].upper() + format[1:]) format = "unknown" reader = createobject(format[0].upper() + format[1:]) # raise exception "no such class"

Python中的動態類

有這樣乙個需求,我有segmentreader postagreader conllreader這三個reader,他們都繼承於乙個reader類。在程式執行中,由使用者通過segment postag或conll決定讀入哪一種資料,所以xreader的例項化也由使用者決定。當然,我們可以寫一連串的...

Python中type()詳解 動態建立類

眾所周知 type 函式可以檢視變數的型別 先看乙個簡單的列子來看一下type檢視變數型別 class animal pass a animal print type a print type animal 可以發現我定義的animal類本身的型別是 type 從 python 直譯器的角度來看,當...

Python中type()詳解 動態建立類

眾所周知 type 函式可以檢視變數的型別 先看乙個簡單的列子來看一下type檢視變數型別 class animal pass a animal print type a print type animal class main animal class type 可以發現我定義的animal類本身...