如何在Python中的for循环中更改对象变量

发布于 2024-11-26 21:19:44 字数 545 浏览 1 评论 0原文

我不确定这是一个容易解决的简单问题还是需要深入挖掘的问题。

假设我有一个带有变量 Item.aItem.b 的对象 Item。 现在我有这些对象的两个实例: Item1Item2

我需要的是这样的东西:

for (value_1, value_2) in [(Item1.a, Item2.a), (Item1.b, Item2.b)]:
    if value_1 != value_2:
        value_1 = value_2

当然,这只是更复杂问题的一个示例。替换是可以的,它找到对象之间的差异并替换它们。问题是,我一直在这些变量的副本上执行此操作,而不是在对象引用上执行此操作。一旦完成循环,我就可以打印 Item1Item2 并且它们与循环之前相同。

是否有可能将引用传递到循环中?我知道如何使用列表来做到这一点,但我找不到对象的答案。

I'm not sure, whether it's an easy problem with easy solution or it's something that needs to dig a little deeper.

Let's say I have an object Item with variables Item.a and Item.b.
Now I have two instances of these objects: Item1 and Item2

What I need is something like this:

for (value_1, value_2) in [(Item1.a, Item2.a), (Item1.b, Item2.b)]:
    if value_1 != value_2:
        value_1 = value_2

Of course this one is only an example of more complex problem. The substitution is ok, it finds differences between objects and substitutes them. The problem is, that all the time I'm doing it on copies of those variables, not on object references. As soon as it finish the loop, I can print both Item1 and Item2 and they are the same as before loop.

Is there any possibility to pass references into a loop? I know how to do it with lists, but I could not find an answer to objects.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

记忆里有你的影子 2024-12-03 21:19:44

好吧,[(Item1.a, Item2.a), (Item1.b, Item2.b)] 只是创建一些值的元组列表。通过创建它,您已经失去了与 ItemX 的连接。你的问题与循环无关。

也许您想要

for prop in ('a', 'b'):
    i2prop = getattr(Item2, prop)
    if getattr(Item1, prop) != i2prop:
        setattr(Item1, prop, i2prop)

或者类似的东西,但也将 ItemX 传递给循环:

for x, y, prop in ((Item1, Item2, 'a'), (Item1, Item2, 'b')):
    yprop = getattr(y, prop)
    if getattr(x, prop) != yprop:
        setattr(x, prop, yprop)

Well, [(Item1.a, Item2.a), (Item1.b, Item2.b)] just creates a list of tuples of some values. Already by creating this you loose the connection to ItemX. Your problem is not related to the loop.

Maybe you want

for prop in ('a', 'b'):
    i2prop = getattr(Item2, prop)
    if getattr(Item1, prop) != i2prop:
        setattr(Item1, prop, i2prop)

Or something similar but with passing ItemX to the loop too:

for x, y, prop in ((Item1, Item2, 'a'), (Item1, Item2, 'b')):
    yprop = getattr(y, prop)
    if getattr(x, prop) != yprop:
        setattr(x, prop, yprop)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文