首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在python中,如何创建一个在运行时之前未指定名称的新变量(Edit:如何将setattr()与列表组合一起使用)?

在python中,如何创建一个在运行时之前未指定名称的新变量(Edit:如何将setattr()与列表组合一起使用)?
EN

Stack Overflow用户
提问于 2018-07-21 04:58:56
回答 2查看 115关注 0票数 1

因此,我有一个具有以下方法的类:

代码语言:javascript
复制
def Add(self,new_name):
        self.new_name=.... 

我想添加一个标题为"new_name“的属性,该属性将从其他地方传递。显然,在上面的程序中,我只是使用字符串"new_name“创建了一个属性,而不是实际的参数输入。

我应该如何确保属性的名称是实际的参数?我相信在C++中使用c_str()是很容易的,但是对于Python我就不确定了。

例如。Add('hello')应该创建一个新的属性self.hello,然后我可以将其与信息一起存储。谢谢。

编辑:好的,我知道我现在应该使用setattr()了。然而,我似乎没有得到预期的结果。在初始化是列表理解的情况下,我会这样使用它吗?我尝试了这两种方法,但都不起作用,如下所示:

代码语言:javascript
复制
def Add(self,new_name):  #also doesn't work

        setattr(self, new_name,[API(self.var1,str(new_name),i) for i
        in range(self._NumRows)])  

def Add(self,new_name):  #also doesn't work
        setattr(self, new_name,[]) 
        self.new_name=[API(self.var1,str(new_name),i) for i
        in range(self._NumRows)])  

其中API有3个参数(我知道这不是问题,因为只要我不使用setattr(),并且名称是已知的,就可以很好地工作,所以这与API无关。

编辑:对于那些建议使用字典的人,我不会使用这些属性来存储数据。我正在创建一个方法,它为创建基类的派生类的用户创建一个新属性。这是为了抽象化额外属性的创建,因为我被告知我的代码可能会在我离开时被采用(我是一个实习生),并尽可能容易地创建派生类。

编辑:不要紧,我错误地标记了一个变量。它起作用了!谢谢。

EN

回答 2

Stack Overflow用户

发布于 2018-07-21 05:11:40

如果您知道自己在做什么(而普通字典不是一个选项),则可以使用setattr

代码语言:javascript
复制
def Add(self, new_name, value):
    setattr(self, new_name, value)

这应该是你最后的选择之一。

另外,如果使用代码在编写时知道new_name (因此它不是由程序创建的),而不是这样:

代码语言:javascript
复制
self.Add('hello', 'test')

你可以直接写

代码语言:javascript
复制
self.hello = 'test'

这取决于您如何使用此函数。

票数 2
EN

Stack Overflow用户

发布于 2018-07-21 05:13:06

这就是setattr

代码语言:javascript
复制
def add(self, attr_name):
    val = ...
    setattr(self, attr_name, val)

需要注意的是,您需要使用getattr来检索val (并使用delattr来删除它),并且任何获取/删除它的代码也需要知道attr_name

让您的工作更轻松,使用dict存储数据,而不是属性。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51450293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档