因此,我有一个具有以下方法的类:
def Add(self,new_name):
self.new_name=....
我想添加一个标题为"new_name“的属性,该属性将从其他地方传递。显然,在上面的程序中,我只是使用字符串"new_name“创建了一个属性,而不是实际的参数输入。
我应该如何确保属性的名称是实际的参数?我相信在C++中使用c_str()
是很容易的,但是对于Python我就不确定了。
例如。Add('hello')
应该创建一个新的属性self.hello
,然后我可以将其与信息一起存储。谢谢。
编辑:好的,我知道我现在应该使用setattr()了。然而,我似乎没有得到预期的结果。在初始化是列表理解的情况下,我会这样使用它吗?我尝试了这两种方法,但都不起作用,如下所示:
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无关。
编辑:对于那些建议使用字典的人,我不会使用这些属性来存储数据。我正在创建一个方法,它为创建基类的派生类的用户创建一个新属性。这是为了抽象化额外属性的创建,因为我被告知我的代码可能会在我离开时被采用(我是一个实习生),并尽可能容易地创建派生类。
编辑:不要紧,我错误地标记了一个变量。它起作用了!谢谢。
发布于 2018-07-21 05:11:40
如果您知道自己在做什么(而普通字典不是一个选项),则可以使用setattr
def Add(self, new_name, value):
setattr(self, new_name, value)
这应该是你最后的选择之一。
另外,如果使用代码在编写时知道new_name
(因此它不是由程序创建的),而不是这样:
self.Add('hello', 'test')
你可以直接写
self.hello = 'test'
这取决于您如何使用此函数。
https://stackoverflow.com/questions/51450293
复制相似问题