2012-11-09 121 views
8

的代碼是這樣的:如何通過Python中的字符串訪問類變量?

class Test: 
    a = 1 
    def __init__(self): 
     self.b=2 

當我做的Test一個例子,我可以訪問它的實例變量b這樣的(使用字符串「B」):

test = Test() 
a_string = "b" 
print test.__dict__[a_string] 

但不適用於a,因爲self.__dict__不包含名爲a的密鑰。那麼如果我只有一個字符串a,我怎樣才能訪問a

謝謝!

+0

「self .__ dict__」不包含名爲「a」的鍵的原因是它在'self .__ class __.__ dict__'中。如果你真的想手動操作,你可以閱讀搜索順序中的屬性,並按照相同的順序檢查所有內容......但你真的不想手動執行操作。 (你必須處理插槽,屬性,經典與新風格的類,自定義__dict__,自定義描述符以及各種其他有趣的東西,但與解決問題無關。 ) – abarnert

+1

PS,因爲這很明顯是Python 2.x,所以在這裏你可能想要'class Test(object)',除非你有特定的原因來避免新風格​​的類。即使是簡單的小測試程序,也值得養成這種習慣。 (特別是對於那些明確依賴於兩類不同類型的測試程序......) – abarnert

回答

21
getattr(test, a_string) 

加上一些更多的字符,所以我可以發佈它。

9

使用getattr這樣做你想要什麼:

test = Test() 
a_string = "b" 
print getattr(test, a_string) 
4

試試這個:

class Test:  
    a = 1  
    def __init__(self): 
     self.b=2 

test = Test()  
a_string = "b" 
print test.__dict__[a_string] 
print test.__class__.__dict__["a"] 
1

您可以使用:

getattr(Test, a_string, default_value)

與第三個參數返回如果a_string不是default_value發現在Test類。

相關問題