这段代码中如何考虑对象的初始化?

How is the initialization of objects considered in this code?

在这个class中没有名为“a”的属性那么x.a是如何考虑的呢?同样,什么是“x.a.b”、“x.a.b.c”、“x.a.b.c.d”、“x.a.b.c.d.e”以及如何考虑它们?是 b在“x.a.b”的情况下是 x.a 的属性,在“x.a.b.c”的情况下 c 是 x.a.b 的属性?简单解释一下!!!我完全糊涂了

class Node :
  def __init__(self, data = None, next = None) :
    self.data = data
    self.next = next
x = Node(50)
x.a = Node(40)
x.a.b = Node(30)
x.a.b.c = Node(20)
x.a.b.c.d = Node(10)
x.a.b.c.d.e = Node(5)
print(x.a.b.c.d.e.data)

我想类似于第一个变量x的声明,x.a是该变量的隐式初始化。 x 在您初始化之前不存在,x.a.

也不存在

所以通过初始化 x.a 你首先需要 x 存在,这意味着你不能做类似

class Node :
  def __init__(self, data = None, next = None) :
    self.data = data
    self.next = next
x = Node(50)
x.a = Node(40)
# Then try to create the chain until C without creating first b
x.a.b.c = Node(20)

如果你测试它会指向

Traceback (most recent call last):
  File "<stdin>", in <module>
AttributeError: 'Node' object has no attribute 'b'

简而言之。我认为即使节点 class 没有属性,链也只是为第一个变量创建子节点。

x 
|_ Node() -> self, data, next
|_ a _
     |_ Node () -> self, data, next
     |_ b _
          |_ Node () -> self, data, next
          |_ c _ 
               |_ ...

请注意,正如 quamrana 所提到的,只有 a 直接附加到 x