AttributeError: type object 'BST' has no attribute 'contains'
AttributeError: type object 'BST' has no attribute '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, 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 中,由于没有大括号表示 class 结束的位置,因此在 class 定义之后与 Python 代码的第一部分处于同一级别的任何缩进都是被认为是 class.
的一部分
像这样缩进你的静态方法,它会起作用:
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
作为 class 的属性名称,因为它是 built-in function 并且应该始终可用(不会被命名空间中的其他内容所掩盖)。
我一直收到属性错误,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 中,由于没有大括号表示 class 结束的位置,因此在 class 定义之后与 Python 代码的第一部分处于同一级别的任何缩进都是被认为是 class.
的一部分像这样缩进你的静态方法,它会起作用:
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
作为 class 的属性名称,因为它是 built-in function 并且应该始终可用(不会被命名空间中的其他内容所掩盖)。