2014-02-10 42 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

谢谢!完美工作! –