我有一个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“,”fines“] 来更新属性列表。这意味着更新后的列表也会有”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,inspect.getmembers(x)以及dirs(x),vars(x),(在stackoverflow上提到),但它只给出了主类体中变量/方法的列表而不是 init 。
答案 0 :(得分:4)
使用getattr()
访问动态属性:
for attr in student.studattr:
print attr, getattr(student, attr)
或使用vars()
会为您提供学生当前属性的字典:
for attr, value in vars(student).iteritems():
print attr, value