猿问

Python:从字符串访问类属性

我有一个像下面这样的课程:


class User:

    def __init__(self):

        self.data = []

        self.other_data = []


    def doSomething(self, source):

        // if source = 'other_data' how to access self.other_data

我想为源变量传递一个字符串,doSomething并访问同名的类成员。


我试过getattr了仅对函数起作用(据我所知)以及具有Userextend dict和using self.__getitem__,但这也不起作用。做这个的最好方式是什么?


慕沐林林
浏览 863回答 4
4回答

慕容708150

x = getattr(self, source)如果source命名self的ANY属性(包括other_data您的示例中的),将可以完美地工作。

不负相思意

一幅价值一千个字的图片:>>> class c:        passo = c()>>> setattr(o, "foo", "bar")>>> o.foo'bar'>>> getattr(o, "foo")'bar'

隔江千里

getattr(x, 'y') 相当于 x.ysetattr(x, 'y', v) 相当于 x.y = vdelattr(x, 'y') 相当于 del x.y

噜噜哒

稍微扩展一下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 dataSourceA = 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 dataSourceA = User()print A.doSomething("data")print A.doSomething("other_data")再次产生:[1,2,3][4、5、6]
随时随地看视频慕课网APP

相关分类

Python
我要回答