为什么在我的输入有效时删除 'self' 会导致错误?

Why does removing 'self' cause an error when my input is valid?

我有一个关于classes和'self'的比较基础的问题,虽然我研究过后知道它们的用途-但我仍然不太了解一些实际的实现。

我的问题:

  1. 我得到 'self' is not defined for the last line of code。这是为什么?

  2. 我曾看到在 post-order_traversal_iterative 的函数中我会做 self.root 的情况,但在其他情况下它只是 root。 我知道 class 的目的是让我们可以在同一个 class 中引用变量和其他东西,但在不同的函数中,这就是我们使用 self.root 的地方 - 这是对吗?

  3. 考虑 2。我认为我们根本不需要 'self'。但是当我把所有的自我都拿出来时,我的输入 [1,None,2,3]

    得到了一个意想不到的参数
     class Treenode:
         def __init__(self,val=0, left=None, right=None):
             self.val = val
             self.left = left
             self.right = right
    
     class Solution:
         def post_order_traversal_iterative(self,root):
             stack = [root]
             output = []
             if not root:
                 return []
             while stack:
                 curr = stack.pop()
                 output.append(curr.val)
                 if curr.right:
                     stack.append(curr.left)
                 if curr.left:
                     stack.append(curr.right)
             return output
    
     x = Solution()
     print(x.post_order_traversal_iterative(self,[1, None, 2, 3]))
    

你没有在 class 之外提到 self。 Python 在实例方法的后台为您使用它。

你做了一个x,它允许你像这样调用实例方法x.post_order_traversal_iterative([1, None, 2, 3])

(可以这样想 Solution.post_order_traversal_iterative(x, [1, None, 2, 3]