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

vhmi4jdf  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(210)

在这个类中没有称为“a”的属性,那么如何考虑x.a呢?类似地,“x.a.b”、“x.a.b.c”、“x.a.b.c.d”、“x.a.b.c.d.e”是什么?它们是如何考虑的?在“x.a.b”的情况下,b是x.a.b的属性吗?在“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)
wd2eg0qa

wd2eg0qa1#

我想这和第一个变量的声明类似 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'

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

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

请注意,正如quamrana所提到的 a 直接连接到 x .

相关问题