Python AttributeError:type object';英国夏令时';没有属性';包含';

Python AttributeError:type object';英国夏令时';没有属性';包含';,python,tree,binary-search-tree,nodes,attributeerror,Python,Tree,Binary Search Tree,Nodes,Attributeerror,我一直得到属性错误,BST不包含属性包含,当它包含时,这是一个简单的BST程序,用于检查节点是否包含子树 我是python新手,所以我不知道这里有什么问题,如果有任何帮助,我们将不胜感激 从集合导入namedtuple BST级: #我们使用namedtuple,因为它允许我们为每个位置创建一个具有名称的对象 tuple=namedtuple('tuple',['left','right','value'])) #这里,contains是一个静态方法,因为我们必须创建一个实用函数来检查 #如果节

我一直得到属性错误,BST不包含属性包含,当它包含时,这是一个简单的BST程序,用于检查节点是否包含子树

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

从集合导入namedtuple
BST级:
#我们使用namedtuple,因为它允许我们为每个位置创建一个具有名称的对象
tuple=namedtuple('tuple',['left','right','value']))
#这里,contains是一个静态方法,因为我们必须创建一个实用函数来检查
#如果节点在其子树中具有该值。
@静力学方法
def包含(根,值):
如果root.value==值:
返回真值
#表示该值大于根节点,并且必须位于右子树上。
elif root.value<值:
#如果右子树为空,则所述节点不包含该值,则返回false。
如果root.right==无:
返回错误
#它确实包含一个正确的子树,递归地再次调用contains方法,直到找到值为止。
其他:
返回BST.contains(root.right,value)
#否则,根值小于根节点,并且必须位于左侧。
其他:
#如果左子树为空,则所述节点不包含该值,则返回false。
如果root.left==无:
返回错误
其他:
返回BST.contains(root.left,值)
n1=BST.tuple(值=1,左=无,右=无)
n3=BST.tuple(值=3,左=无,右=无)
n2=BST.tuple(值=2,左=n1,右=n3)
结果=BST.contains(n2,3)
打印(结果)

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

像这样缩进静态方法,它将工作:

BST级:
#我们使用namedtuple,因为它允许我们为每个位置创建一个具有名称的对象
tuple=namedtuple('tuple',['left','right','value']))
#这里,contains是一个静态方法,因为我们必须创建一个实用函数来检查
#如果节点在其子树中具有该值。
@静力学方法
def包含(根,值):
....
另外,我建议不要使用
tuple
作为类的属性名称,因为这是一个属性,并且应该始终可用(不要被名称空间中的其他内容所掩盖)