我有一个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”、道布、“分支”、“book”、"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.getmembers(x)和dirs(x),vars(x),(在堆栈溢出中提到),但是它只给出了一个主类主体中的变量/方法的列表,而不是init中的变量/方法。
发布于 2014-02-10 13:23:06
使用getattr()访问动态属性:
for attr in student.studattr:
print attr, getattr(student, attr)或者使用vars()会给出学生当前属性的字典:
for attr, value in vars(student).iteritems():
print attr, valuehttps://stackoverflow.com/questions/21678419
复制相似问题