这段代码如何考虑 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)
.
此处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.
如果你这样做 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)
.