You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过列表修改Python类的属性?

如何通过列表修改类属性?

你猜的没错——当你把myobject.attrib放入列表时,存入的只是它当前的值(整数0)的副本,和类属性本身没有关联。修改列表里的元素只是改变了列表中的那个独立值,自然不会影响myobject.attrib。

要通过列表修改类属性,得让列表里保存能关联到类属性的引用,而不是单纯的值。这里有几种可行的方法:

方法一:直接存入类对象

把类本身放进列表,之后通过列表中的类对象直接修改属性:

class myobject:
    attrib = 0

thelist = [object(), myobject]
# 通过列表中的类对象修改属性
thelist[1].attrib = 1
print(myobject.attrib)  # 输出 1

方法二:存入类名和属性名的组合

如果不方便存类对象,可以把类的名称(字符串)和属性名存入列表,之后通过命名空间获取类并修改属性:

class myobject:
    attrib = 0

thelist = [object(), ('myobject', 'attrib')]
# 从全局命名空间获取类,修改属性
cls_name, attr_name = thelist[1]
setattr(globals()[cls_name], attr_name, 1)
print(myobject.attrib)  # 输出 1

方法三:用包装类持有属性引用

自定义一个简单的包装类,用来保存类和属性的引用,通过包装类的接口来修改原始属性:

class Ref:
    def __init__(self, obj, attr_name):
        self.obj = obj
        self.attr_name = attr_name
    
    def set_value(self, new_val):
        setattr(self.obj, self.attr_name, new_val)

class myobject:
    attrib = 0

thelist = [object(), Ref(myobject, 'attrib')]
# 通过包装对象修改原始属性
thelist[1].set_value(1)
print(myobject.attrib)  # 输出 1

这些方法的核心都是让列表里保存能指向类属性的关联对象,而不是单纯的属性值,这样修改时就能直接作用到原始的类属性上。

内容的提问来源于stack exchange,提问作者user74542

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 04:21:23