有人能解释一下下面的python代码吗

有人能解释一下下面的python代码吗,python,python-2.7,Python,Python 2.7,这将“price”属性设置为c1和c1实例 但是for循环如何与obj一起工作?Python元组由逗号组成: 因此,obj首先绑定到Car实例c1引用,然后绑定到c2引用 因此,循环只是这样做:obj=c1,然后obj=c2,并在每次这样的分配之后执行循环体。然后,setattr()调用将attr字符串中命名的属性设置为value中的值 >>> for obj in c1, c2: print obj ... <__main__.Car instance at 0x103

这将“price”属性设置为
c1
c1
实例


但是
for
循环如何与obj一起工作?

Python元组由逗号组成:

因此,
obj
首先绑定到
Car
实例
c1
引用,然后绑定到
c2
引用

因此,循环只是这样做:
obj=c1
,然后
obj=c2
,并在每次这样的分配之后执行循环体。然后,
setattr()
调用将
attr
字符串中命名的属性设置为
value
中的值

>>> for obj in c1, c2: print obj
...
<__main__.Car instance at 0x1031fa368>
<__main__.Car instance at 0x1031fa290>
是一个空类声明,类似于C中的结构,然后:

Class Car: pass
两个未初始化的Car实例

c1 = Car()
c2 = Car()
两个变量,最后

attr = "price"
value = 20000

使用“helper”对象对它们进行迭代,您可以使用该对象为两个实例的变量中的值设置属性。

您是指c1、c2:部分中obj的
?这只是一个元组上的循环。
c1,c2
是一个元组,您的代码相当于(c1,c2)中obj的
。您可能会发现这篇文章很有用:,它是由经验丰富的Ned Batchelder编写的。明白了。。。Thnx:)现在我意识到这个问题有多严重;)
obj
不是某种单独的“助手”对象—它只是一个名称,依次绑定到对象,这些对象也绑定到名称
c1
c2
。有关此主题的更多信息,请参阅我在对该问题的评论中链接的文章“Python元组由逗号组成”。有一个例外:
type(())
给了我
(至少在Python 3.4中是这样)。@Matthias:这是因为表达空元组的唯一方法是使用括号。还需要使用括号来消除元组中使用逗号与函数调用中使用其他逗号之间的歧义。所以你也需要用括号来表示
type((c1,c2))
,因为
type(c1,c2)
传入两个参数,而不是一个元组。@Matthias:但就其本身而言,
1,
是一个有一个元素的元组,而普通的
1
只是一个整数。是的,我知道
1
1,
之间的区别。只是几天前我在一个Python论坛上向另一个用户解释了这个“逗号的事情”,并遇到了这个例子。从那以后,我一直在想这件事……@Matthias:看看这里的动机。
c1 = Car()
c2 = Car()
attr = "price"
value = 20000
for obj in c1, c2 : setattr(obj, attr, value)