如何解决AttributeError:类型对象'BST'没有属性'contains'
我不断收到属性错误,即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,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,right=None)
n2 = BST.tuple(value=2,left=n1,right=n3)
result= BST.contains(n2,3)
print (result)
解决方法
您的静态方法被错误地缩进。在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):
....
P.S。我建议不要将tuple
用作类的属性名称,因为它是built-in function,并且应该始终可用(不要被名称空间中的其他内容所遮盖)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。