我尝试用以下方式创建两个类:
class A:
def __init__(self, n):
self.Bs = [B(i,self) for i in range(n)]
class B:
def __init__(self, i, a):
self.i = i
self.a = a
print(a.Bs) # this line throws an error
当我拿出打印语句时,一切都很顺利:
a = A(2)
a.Bs
→ [<__main__.B at 0x10d45c0d0>, <__main__.B at 0x10d45c490>]
(a.Bs[0].a == a) & (a.Bs[1].a == a)
→ True
当我试图在类B的构造函数中访问A的.Bs属性时(例如在print语句中),就会出现问题
正如@user10987432所指出的,当您尝试}中,执行以下操作:
print(a.Bs)
时,a.Bs
还不存在。Python首先必须计算右侧的列表理解,然后将其分配给左侧的变量。我不知道你想做什么,但也许这有帮助?在{这样一来,
a.Bs
从一开始就存在,并且随着所有Bs
的创建而改变:请注意每次调用
B.__init__
时打印是如何被调用的,以及列表是如何随着创建更多Bs
而增长的相关问题 更多 >
编程相关推荐