【问题标题】:How to assign a new class attribute via __dict__?如何通过 __dict__ 分配新的类属性?
【发布时间】:2010-09-30 18:33:36
【问题描述】:

我想通过一个字符串对象来分配一个类属性——但是怎么做呢?

例子:

class test(object):
  pass

a = test()
test.value = 5
a.value
# -> 5
test.__dict__['value']
# -> 5

# BUT:
attr_name = 'next_value'

test.__dict__[attr_name] = 10
# -> 'dictproxy' object does not support item assignment

【问题讨论】:

    标签: python oop class attributes


    【解决方案1】:

    有一个内置函数:

    setattr(test, attr_name, 10)
    

    参考:http://docs.python.org/library/functions.html#setattr

    例子:

    >>> class a(object): pass
    >>> a.__dict__['wut'] = 4
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'dictproxy' object does not support item assignment
    >>> setattr(a, 'wut', 7)
    >>> a.wut
    7
    

    【讨论】:

    • 这似乎在对象内部对我有用:self.__dict__.update(result) where result is a dict
    • 根据this 回答“mappingproxy 只是一个没有setattr 方法的dict。”
    猜你喜欢
    • 2012-03-11
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多