【发布时间】:2018-02-19 03:20:26
【问题描述】:
我尝试了一个小的trafficlight 实现,得到了以下代码:
def __init__(...):
...
self.redLight = Light(color = "red", master = self.frame)
self.redLight.place(x = 10, y = 10)
self.yellowLight = Light(color = "yellow", master = self.frame)
self.yellowLight.place(x = 10, y = 40)
self.greenLight = Light(color = "green", master = self.frame)
self.greenLight.place(x = 10, y = 70)
...
我觉得无聊,试图在循环中定义这个相当多余的代码:
def __init__(...):
...
self.redLight = None
self.yellowLight = None
self.greenLight = None
for l in [[self.redLight, "red", 10],
[self.yellowLight, "yellow", 40],
[self.greenLight, "green", 70]]:
l[0] = Light(color = l[1], master = self.frame)
l[0].place(x = 10, y = l[2])
...
我的理解是,它与第一个代码示例完全相同,但事实证明,它并没有编写实例变量。当我在调试器中查看代码时,l[0] 对象是一个 Light-object...
不是python call-by-reference,所以l[0]应该直接写实例变量?
【问题讨论】:
-
l[0]是索引 0 处的列表元素,而不是实例变量。 -
但是如果python引用了它就不是问题了吗?那么
l[0]将是(参考)与self.redLight相同的对象
标签: python python-3.x class attributes