【问题标题】:Set attributes on class from a dict从字典中设置类的属性
【发布时间】:2021-07-14 08:21:16
【问题描述】:

我成功地实现了一个描述符来清理我的代码,并且到目前为止它运行良好。此时我的代码看起来基本上是这样的

class ABC:
  att1 = Descriptor(arg1)
  att2 = Descriptor(arg2)
  att3 = Descriptor(arg3)

但是,为了进一步减少重复,我想做这样的事情

class ABC:
  att_arg = {'att1':arg1,
             'att2':arg2,
             'att3':arg3}

  for att, arg in att_arg.items():
     setattr(ABC, att, Descriptor(arg))

但这会导致NameError: name 'ABC' is not defined。 已经考虑过使用包装类来执行此操作,但有人知道对此的优雅解决方案吗?

【问题讨论】:

    标签: python-3.x python-descriptors


    【解决方案1】:

    在构造函数中怎么做呢?从那里您可以使用self 对象来设置属性:

    class ABC:
        ATTR_ARG = {'att1':arg1,
                    'att2':arg2,
                    'att3':arg3}
    
        def __init__(self):
            for attr, arg in ATTR_ARG.items():
                setattr(self, attr, Descriptor(arg))
    

    【讨论】:

    • 不适用于描述符。只有在类级别设置属性时才有效。如果在构造函数中设置,则属性不会返回其值,而是返回 Descriptor 对象本身。
    猜你喜欢
    • 2011-01-28
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多