我有一些Python代碼依賴於類型檢查。我會盡量用數學語言來解釋我的問題,所以很清楚。我有幾個類對應於彼此的子集並形成一個繼承鏈。Python類型檢查和繼承問題
class Real(object):
pass
class Integer(Real):
pass
class Natural(Integer):
pass
而且我有一個包含類型的元組。其中每個對應於某個函數的域。
t1 = (Real, Real)
t2 = (Real , Integer)
我想這樣做某種形式的類型檢查,這樣的給定一個元組的另一如果(Natural , Natural)
元組中的每個座標爲指定域的子類。例如,對於一些功能getcompatibles
我想有:
getcompatibles((Real, Real)) = [ t1 ]
getcompatibles((Real, Integer)) = [ t1, t2 ]
getcompatibles((Natural, Natural)) = [ t1, t2 ]
getcompatibles((Natural, Real)) = [ t1 ]
唯一的解決辦法我能想出是通過每一個域(T1,T2)來運行通過每個類型的__subclasses__
運行,檢查給定輸入是否爲isinstance
爲真。
雖然這樣效率極低,但是可能有更多的Pythonic方法來做到這一點?
更改is_compatible - > getcompatibles – 2010-05-19 17:10:30