我有一个类如下:
class User:
def __init__(self):
self.data = []
self.other_data = []
def doSomething(self, source):
// if source = 'other_data' how to access self.other_data
Run Code Online (Sandbox Code Playgroud)
我想传入源变量的字符串doSomething并访问同名的类成员.
我已经尝试过getattr只能在函数上工作(从我能说的)以及User扩展dict和使用self.__getitem__,但这也不起作用.做这个的最好方式是什么?
Ale*_*lli 234
x = getattr(self, source)如果source命名自己的任何属性,包括other_data在你的例子中,它将完美地工作.
Rob*_*ney 161
一张图片胜过千言万语:
>>> class c:
pass
o = c()
>>> setattr(o, "foo", "bar")
>>> o.foo
'bar'
>>> getattr(o, "foo")
'bar'
Run Code Online (Sandbox Code Playgroud)
Yas*_*Yas 44
getattr(x, 'y') 相当于 x.ysetattr(x, 'y', v) 相当于 x.y = vdelattr(x, 'y') 相当于 del x.y稍微扩展亚历克斯的回答:
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")
Run Code Online (Sandbox Code Playgroud)
将产生:
[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")
Run Code Online (Sandbox Code Playgroud)
再次产生:
[1, 2, 3] [4, 5, 6]
| 归档时间: |
|
| 查看次数: |
93465 次 |
| 最近记录: |