python - 更新多个属性python

标签 python class attributes

我有一个类 Test 具有属性 Test.att1, Test.att2, ... , Test.att10 。我有一个方法 Test.update() 可以计算十个新值 vals = [v1, v2, ... , v10]。我想在单个 for 循环中更新 Test 的属性。

我设想在 Test 类和设置中循环遍历列表 mylist = [self.att1, self.att2, ... , self.att10]每个 vals 的值,但这似乎不起作用。我可以做什么/在不使用 self.att1, self.att2, self.att3 = v1, v2, v3 结构的情况下更新多个属性的最佳方法是什么?

编辑:我特地询问是因为我正在做类似的事情:

a1, a2, a3, a4, a5 = self.update()
self.a1 = pd.concat([self.a1, a1]).drop_duplicates().reset_index(drop=True)
self.a2 = pd.concat([self.a2, a2]).drop_duplicates().reset_index(drop=True)
self.a3 = pd.concat([self.a3, a3]).drop_duplicates().reset_index(drop=True)
self.a4 = pd.concat([self.a4, a4]).drop_duplicates().reset_index(drop=True)
self.a5 = pd.concat([self.a5, a5]).drop_duplicates().reset_index(drop=True)

目前正在使用 我最终这样做的一种倒退方式是:

def update(self):
    dfs = [self.att1, self.att2, ..., self.att10]
    dfs = [pd.concat([dfs[i], vals[i]]).drop_duplicates().reset_index(drop=True) \
                for i in range(len(dfs))]
    [self.att1, self.att2, ..., self.att10] = dfs

但在寻求更好的方法

最佳答案

您可以结合使用 setattrhasattr 来更新和添加属性到目标对象。

attrs = [a for a in dir(Test) if a.startswith('attr') and 'no_update' not in a]

### To update existing attrs ###
new_vals = [...]
for a, v in zip(attrs, new_vals):
    if hasattr(Test, a):
        setattr(Test, a, v)

### To add new attrs ###
new_vals = [...]
start = int(attrs[-1][4:]) + 1 # the number the new attrs should start at
new_attrs = ['attr%d' % n for n in range(start, start+len(new_vals))] # if start==4 and len(new_vals)==3: return ['attr5', 'attr6', 'attr7']
for a, v in zip(new_attrs, new_vals):
    setattr(Test, a, v)

这些也可以结合起来,以允许更新现有的属性并在需要时设置新的属性。

关于python - 更新多个属性python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46087825/

相关文章:

javascript - 是否有一个函数可以将 TypeScript/Angular 类分解为属性?

python - 从该类内部的类调用实例变量

html - 为什么 HTML 中的属性 "fdprocessedid"出现在控制台中?

python - 在python中从返回的JSON转换unicode字符

python - 在 Google App Engine 中选择数据存储 ID?

python - 将路径/bar/foo/baz/../.. 解析为/bar 的方便方法是什么?

javascript - 使用 ES6 类继承链的 instanceof 不起作用

css - 更改光标图像

c# - 强制枚举将数字识别为 C# 中的字符串

python服务器配置。 IOError : [Errno 13] Permission denied(Permission denied to . ..log.file)