2010-04-20 37 views
9

我有一個簡短的問題。我有一個存儲類的實例的二維數組。數組的元素根據程序中前面讀取的文本文件分配一個特定的類。由於我不知道沒有在文件中查找哪些類存儲在特定的元素,我可以引用該索引中不存在的字段(指當temp的實例存儲在該索引中時的外觀)。我想出了一個測試方法,但它很長,需要第二個矩陣。是否有函數來測試一個類中字段的存在?測試類中是否存在字段

class temp(): 
    name = "default" 

class temp1(): 
    appearance = "@" 

回答

3

你是否在尋找:

isinstance(對象,CLASSINFO)

返回 真如果對象參數是CLASSINFO參數的 實例,或者一個 (直接或間接)子類 。如果classinfo 是一個類型對象(新樣式類)並且 對象是該類型的對象或 a(直接或間接)子類 也返回true。如果對象不是類 實例或給定的 類型的對象,則函數始終返回 false。如果classinfo既不是類 對象也不是類型對象,它可能是 類或對象類型的元組,或可能 遞歸地包含其他這樣的元組 (其他序列類型不接受 )。如果classinfo不是 的類,類型或元組的類型, 類型和這些元組,則會引發TypeError 異常。

無論你想要做什麼似乎都不是一個好主意。請更詳細地描述您的原始需求,我們將幫助您提出更好的設計。

25

hasattr(x, 'foo')是一個內置的二進制函數,用於檢查對象x是否具有屬性x.foo(它是否從它的類中獲取),這看起來接近你所要求的。不管你問的是應該是所要求的是一個不同的問題 - 正如@Eli的回答所暗示的,你的設計看起來很奇怪。但是,這可以解答你的問題;-)。

2

您也可以使用異常處理來執行此操作。

try: 
    val = x.name 
except AttributeError: 
    val = x.appearance