有人可以解释下面的python代码

时间:2015-11-26 14:56:14

标签: python python-2.7

class Car: pass

c1 = Car()
c2 = Car()

attr = "price"
value = 20000

for obj in c1,c2 : setattr(obj, attr, value)

这会将“price”属性设置为c1c1个实例。

但是for循环如何与obj一起使用?

2 个答案:

答案 0 :(得分:0)

Python元组由逗号

组成
>>> class Car: pass
...
>>> c1 = Car()
>>> c2 = Car()
>>> c1, c2
(<__main__.Car instance at 0x1031fa368>, <__main__.Car instance at 0x1031fa290>)
>>> type(_)  # type of the last result
<type 'tuple'>

圆括号是可选;你也可以把元组写成(c1, c2)

for循环只是遍历那个元组;循环将元组中的每个元素分配给obj进行该迭代:

>>> for obj in c1, c2: print obj
...
<__main__.Car instance at 0x1031fa368>
<__main__.Car instance at 0x1031fa290>
因此,

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

循环因此只执行此操作:obj = c1,然后obj = c2,并在每次此类分配后执行循环体。 setattr()调用只会将attr字符串中指定的属性设置为value中的值。

答案 1 :(得分:-1)

Class Car: pass

是一个空类声明,类似于C中的结构,然后是:

c1 = Car()
c2 = Car()

两个Car实例,未初始化,然后,

attr = "price"
value = 20000

两个变量,最后,

for obj in c1, c2 : setattr(obj, attr, value)

使用&#34;帮助&#34;迭代它们。 object,用于将属性设置为变量中的值到两个实例。