【问题标题】:Iterating over a list adding attributes to an object in Python [duplicate]迭代列表,在 Python 中向对象添加属性 [重复]
【发布时间】:2014-05-16 17:08:03
【问题描述】:

这就是我想要的。

def add_things_to_x(x,list_of_things):
    for item in list_of_things:
        x.item = item
    return x

我该怎么做?

而且看起来很难做到,我猜可能有更好的方法和不这样做的理由?

一个我如何使用这样一个函数的例子。

average_height = 10
std_height = 3

x = load_data()

x = add_things_to_x(x,[average_height,std_height])

x.save_data()

所以以后如果我 pickle.load(x) 我可以调用 x.std_height 和 x.average_height

【问题讨论】:

  • 不清楚你的问题是什么;您显示的代码有效,但最后您将x.item 设置为不同的值,最后只有最后一个。这是预期的结果,还是您有其他想法?
  • @WillBeauchamp 向我们展示您想如何使用它以及您期望的结果。
  • 你是对的,它是模棱两可的,让我试着改变它。
  • 你想设置动态属性,你的调用将无法工作,因为你想设置的names不再与价值观.
  • How can you set class attributes from variable arguments (kwargs) in python 的可能重复项(我已经对“不清楚你在问什么”投了赞成票)。

标签: python


【解决方案1】:

使用setattr 处理这类事情:

for k, v in {'average_height': 10, 'std_height': 3}:
    setattr(x, k, v)

目前,您已将 x.item 设置为不同的值,最后只有最后一个。这避免了这个问题,因为属性的名称是作为字符串参数发送的。

【讨论】:

  • OP 可能想要传入键值对; x.average_height = 10
  • @AlexThornton 你能提供完整的工作示例吗?到目前为止,我看到了不清楚的问题,然后是您的回答,这对我也没有帮助。
猜你喜欢
  • 1970-01-01
  • 2012-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 2021-11-09
  • 2017-02-10
相关资源
最近更新 更多