【问题标题】:AttributeError: type object 'BST' has no attribute 'contains'AttributeError:类型对象“BST”没有属性“包含”
【发布时间】:2020-10-26 14:42:17
【问题描述】:

我不断收到属性错误,BST 不包含包含的属性,这是一个简单的 BST 程序,用于检查节点是否包含子树。

我是 python 新手,所以我不知道这里有什么问题,任何帮助将不胜感激。

from collections import namedtuple


class BST:
    #We are using namedtuple since it allows us to create an object with names for each position
      tuple = namedtuple('tuple', ['left', 'right', 'value'])



#here, contains is a static method since we have to create a utility function to check 
#if the node has the value in its subtrees.

@staticmethod
def contains(root, value):
      if root.value == value:
          return True
        
     #means the value is greater than the root node and must lie on the right sub-tree.
      elif root.value < value:
            
            #if the right subtree is empty, than the said node does not contain the value, return false.
          if root.right == None:
               return False
            
            
            
           #it does contain a right subtree, recursively call the contains method again till you find the value.
          else:
               return BST.contains(root.right,value)
            
     #else,root value is lesser than the root node and must lie on the left side.
      else:
            
        
        
        #if the left subtree is empty, than the said node does not contain the value, return false.
          if root.left == None:
              return False
          else:
              return BST.contains(root.left,value)
         


n1 = BST.tuple(value=1, left=None, right=None)
n3 = BST.tuple(value=3, left=None, right=None)
n2 = BST.tuple(value=2, left=n1, right=n3)



result= BST.contains(n2, 3)
print (result)

【问题讨论】:

    标签: python tree binary-search-tree nodes attributeerror


    【解决方案1】:

    您的静态方法缩进错误。在 Python 中,由于没有大括号来表示类的结束位置,因此在类定义之后与 Python 代码的第一部分处于同一级别的任何缩进都被视为该类的一部分。

    像这样缩进你的静态方法,它会起作用:

    class BST:
        #We are using namedtuple since it allows us to create an object with names for each position
        tuple = namedtuple('tuple', ['left', 'right', 'value'])
    
    
    
        #here, contains is a static method since we have to create a utility function to check 
        #if the node has the value in its subtrees.
        @staticmethod
        def contains(root, value):
            ....
    

    附:我建议不要使用 tuple 作为类的属性名称,因为它是 built-in function 并且应该始终可用(不会被命名空间中的其他内容所掩盖)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 2021-11-09
      • 2019-06-08
      • 2022-01-12
      • 2016-11-18
      • 2019-02-25
      • 2021-09-01
      相关资源
      最近更新 更多