我有一个类如下:
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.y
setattr(x, 'y', v)
相当于 x.y = v
delattr(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 次 |
最近记录: |