有這樣乙個需求,我有segmentreader
、postagreader
、conllreader
這三個reader
,他們都繼承於乙個reader
類。在程式執行中,由使用者通過segment
、postag
或conll
決定讀入哪一種資料,所以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類本身...