4 回答
TA贡献1831条经验 获得超4个赞
x = getattr(self, source)如果source命名self的ANY属性(包括other_data您的示例中的),将可以完美地工作。
TA贡献1777条经验 获得超10个赞
一幅价值一千个字的图片:
>>> class c:
pass
o = c()
>>> setattr(o, "foo", "bar")
>>> o.foo
'bar'
>>> getattr(o, "foo")
'bar'
TA贡献1906条经验 获得超10个赞
getattr(x, 'y')相当于x.ysetattr(x, 'y', v)相当于x.y = vdelattr(x, 'y')相当于del x.y
TA贡献1784条经验 获得超7个赞
稍微扩展一下Alex的答案:
class User:
def __init__(self):
self.data = [1,2,3]
self.other_data = [4,5,6]
def doSomething(self, source):
dataSource = getattr(self,source)
return dataSource
A = User()
print A.doSomething("data")
print A.doSomething("other_data")
将产生:
[1,2,3]
[4、5、6]
但是,我个人认为这不是很好的样式- getattr可以让您访问实例的任何属性,包括doSomething方法本身甚至实例的属性__dict__。我建议您改为实现一个数据源字典,如下所示:
class User:
def __init__(self):
self.data_sources = {
"data": [1,2,3],
"other_data":[4,5,6],
}
def doSomething(self, source):
dataSource = self.data_sources[source]
return dataSource
A = User()
print A.doSomething("data")
print A.doSomething("other_data")
再次产生:
[1,2,3]
[4、5、6]
添加回答
举报
