python中setattr()函数用法详解
  TEZNKK3IfmPf 2023年11月13日 72 0

setattr() 函数对应函数 getattr(),用于设置属性值,该属性不一定是存在的。

getattr()用法详见

setattr() 函数源码:

def setattr(x, y, v): # real signature unknown; restored from __doc__
    """
    Sets the named attribute on the given object to the specified value.
    
    setattr(x, 'y', v) is equivalent to ``x.y = v''
    """
    pass

语法结构:

setattr(object, name, value)
  • object -- 对象。
  • name -- 字符串,对象属性。
  • value -- 属性值。
  • return   None

示例代码1:  【类中属性值存在的情况】

class Test(object):
    test = 1


print(Test.test)
print(Test().test)

obj = Test()
ret = getattr(obj, 'test')  # 获取属性 test 值
print(ret)

setattr(obj, 'test', 5)  # 设置属性 test 值
print(obj.test)

运行结果:

python中setattr()函数用法详解

示例代码2:  【类中属性值不存在的情况】

class Test(object):
    test = 1


obj = Test()

setattr(obj, 'age', 5)  # 设置属性 age 值
print(obj.age)

运行结果:

python中setattr()函数用法详解

示例代码3: 【setattr和getattr共同使用,嵌套数据结构类型】

class Struct(object):
    def __init__(self, data):
        for name, value in data.items():
            setattr(self, name, self._wrap(value))

    def _wrap(self, value):
        if isinstance(value, (tuple, list, set, frozenset)):
            return type(value)([self._wrap(v) for v in value])
        else:
            return Struct(value) if isinstance(value, dict) else value


d = {'a': 1, 'b': {'c': 2}, 'd': ["AA", {'BB': "CC"}]}
x = Struct(d)
print(x)

setattr(x, "XX", {})
print(x.__dict__)
print(type(x))
setattr(getattr(x, 'b'), 'cc', {'name': 'dgw'})
setattr(getattr(x, 'b'), 'ccc', [1, 2, 3])
print(x.__dict__)
print(x.b.c)
print(x.b.cc)
print(x.b.ccc)

运行结果:

python中setattr()函数用法详解

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年05月31日   32   0   0 python开发语言
  TEZNKK3IfmPf   2024年05月31日   25   0   0 python
  TEZNKK3IfmPf   2024年05月31日   34   0   0 excelpython
  TEZNKK3IfmPf   2024年05月31日   25   0   0 python
TEZNKK3IfmPf