迭代并更改py3中类常量的值

问题描述 投票:0回答:1

我试图迭代class.__dict__并改变它的常量。我的工作代码适用于python 2,但不适用于python 3。这是在py2中工作的代码:

class SOMECLASS:
    a = 'Something'
    b = 'Something else'

change = vars(SOMECLASS)
for k, v in change.items():
    if not '__' in k:
        change[k] = 'some_new_value'

独立使用此代码是py3抛出TypeError: 'mappingproxy' object does not support item assignment。为了绕过这个,我对代码做了这个改动:

change = dict(vars(rng.JSCSS))

但这不起作用,因为当循环停止时,change恢复到原始值。谷歌搜索,setattr功能不断出现,但这不适用于我想要完成的任务。

我实际上正在转换我的原始代码,这对py2来说也适用于py3。

python python-3.x class
1个回答
3
投票

setattr确实适用于此,您可以使用它来更改类的属性:

class SOMECLASS:
    a = 4
    b = 4

change = vars(SOMECLASS)


for i in change:
    if not '__' in i:
        setattr(SOMECLASS, i, 5)

x = SOMECLASS()
print(x.a)

输出:

5
© www.soinside.com 2019 - 2024. All rights reserved.