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

问题描述

这里在类 Node 中没有名为“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) 正在创建一个新的节点类对象,其中 x.left 分配给 50。

现在通过执行 x.a = Node(40),我们只是定义了一个名为 x 的对象 a 的新属性,它将是一个 Node 类对象left50

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

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

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

结论

如果在对象中不存在 x.new_attribute = Node(10,20,30) 时执行 new_attribute,那么 python 将在 {{ 1}} 名称为 x 的对象并为其分配值 new_attribute