【问题标题】:How is the initialization of objects considered in this code?此代码中如何考虑对象的初始化?
【发布时间】:2021-04-27 15:13:43
【问题描述】:

在这个类中没有名为“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的属性,在“的情况下c是x.a.b的属性吗? x.a.b.c”?简要说明!!!我完全糊涂了????

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 = Node(50)怎么样? x 来自哪里?
  • 顺便说一句,我从名称 Node 猜测它具有 next 属性,您正在制作的每个节点都应该有它们的 next 属性参考下一个 @987654327 @.

标签: python python-3.x class object attributes


【解决方案1】:

我想类似于第一个变量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

【讨论】:

  • 在您发布的原始代码中,Node 的每个实例都有不同的额外属性。即:x 具有 a 属性,但 x 没有任何 b .. e 属性。同样,bc 属性具有d 属性,但没有xabe
  • 但这正是该声明所代表的,不是吗?它没有分配给Nodenext 属性,它只是创建了一个可能与Node 类无关的x 新属性。
  • 我只是确保您和所有访问这里的未来程序员都知道x 只被赋予了 一个 额外属性,因为您声明:@ 987654350@ 我认为您的意思是该链在x 上创建了许多节点,这是不正确的。
  • 哦,当然,现在我发现我表达的方式不对,抱歉,您认为我应该更正文字吗?即使在我的“草图”中,我也试图表示 b 仅与 a 相关,而不直接与 x 相关。
猜你喜欢
  • 1970-01-01
  • 2011-07-26
  • 2011-08-13
  • 2012-03-22
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
  • 2013-06-27
  • 1970-01-01
相关资源
最近更新 更多