2014-02-10 67 views
0

我有一個Python類,有一些變量。類的定義如下:Python:連接兩個字符串以獲得類的變量

class student: 
    def __init__(self,name,rollno,DOB,branch): 
     self.name=name 
     self.rollno=rollno 
     self.DOB=DOB 
     self.branch=branch 
     self.books=[] 
     self.fines=[] 

添加新的屬性的學生,需要存儲相應的值,以及(供將來使用)。這是使用setattr方法完成的,並且工作正常。

代碼片段:

setattr(student,"date_of_join",date()) 

現在我快到問題,因爲,如果用戶增加了一個新的屬性(比如說, 「date_of_join」),然後我更新的列表(studattr)最初包含[「name」,「rollno」,DOB「,」branch「,」books「,」罰款「]以更新屬性列表。這意味着更新後的列表現在也會附加」date_of_join「它

現在如果我想訪問這個學生屬性列表實例,那我該怎麼做呢? (因爲記錄是動態更新的,讓我們假設我必須訪問x.date_of_join,那麼如何加入這兩個字符串?是否有類似於python的os.path.join,或者更確切地說是linux的系統調用(合併兩個字符串))

問題:?

for attribute in studattr: 
    print attribute,x.attribute 

{ This throws an Exception since the instance x has no variable or method named "attribute") 

PS:我嘗試使用檢查,inspect.getmembers(X)以及迪爾斯(X),瓦爾(X),(#2自提),但它只給出了主類體中變量/方法的列表,而不是init

+0

我猜你需要'getattr':'GETATTR( x,屬性)' –

+2

而不是使用你設置屬性的對象實例,而不是一個正常的字典更適合你想要做的? – RemcoGerlich

+1

如果你正在獲得主類主體中的變量/方法列表,那麼你沒有在實例上運行'dir'。 –

回答

2

使用getattr()訪問動態屬性:

​​

或使用vars()會給你一個學生的當前屬性的字典:

for attr, value in vars(student).iteritems(): 
    print attr, value 
+0

謝謝!完美工作! –