这段代码如何考虑 x.a 的初始化?

How is the initialization of x.a is considered in this code?

此处class节点中没有名为“a”的属性那么x.a是什么意思呢?对象名称可以包含字符“.”吗?在 python ?

class Node :
  def __init__(self, left = None, data = None, right = None) :
    self.left = left
    self.data = data
    self.right = right
x = Node(50)
x.a = Node(40)

Python 是一种 动态类型 语言。这意味着您可以 设置任何 变量 的值 而无需 声明 变量.

在您的代码片段中,x = Node(50) 正在创建一个新节点 class 对象,其中 x.left 分配给 50。

现在通过 x.a = Node(40),我们只是定义对象 x 的新 属性 ,名称为 a,它将是left 值为 50.

的节点 class 对象

如果你这样做 dir(x) 它会给你这样的东西,

['__class__',
 '__delattr__',

  #Some other attributes
 
'__weakref__',
 'a',
 'data',
 'left',
 'right']

如果您查看最后 4 个属性,您会发现 a 现在也添加为 属性 的 x 对象。

结论

如果在对象中不存在 new_attribute 时执行 x.new_attribute = Node(10,20,30),那么 python 将只创建一个 new attribute inside the x object with name new_attribute & assign it the value of Node(10,20,30).