Python ';str';对象没有属性';比较';

Python ';str';对象没有属性';比较';,python,binary-search-tree,Python,Binary Search Tree,事实上,我很多次都会犯这个错误,我不知道它是从哪里来的。! 我的功能是计算bst中的总比较, 她是我的密码 def total(bst): s = Stack() total = 0 s.push(bst._root) while not s.is_empty(): x = s.pop() nu = x._value total = total + nu.compar

事实上,我很多次都会犯这个错误,我不知道它是从哪里来的。! 我的功能是计算bst中的总比较, 她是我的密码

def total(bst):
     s = Stack()
        total = 0
        s.push(bst._root)
        while not s.is_empty():
            x = s.pop()
            nu = x._value
            total = total + nu.comparisons
            if x._right:
                s.push(x._right)
            if node._left:
                s.push(x._left)

        return total
这里是错误

total = total + i.comparisons
AttributeError: 'str' object has no attribute 'comparisons'
以下是信件的分类:

class Letter:

    def __init__(self, letter):

        assert letter.isalpha() and letter.isupper(), "Invalid letter"

        self.letter = letter
        self.count = 0
        self.comparisons = 0
        return

    def __str__(self):

        return "{}: {}, {}".format(self.letter, self.count, self.comparisons)

    def __eq__(self, rs):

        self.count += 1
        self.comparisons += 1
        result = self.letter == rs.letter
        return result

    def __lt__(self, rs):

        self.comparisons += 1
        result = self.letter < rs.letter
        return result

    def __le__(self, rs):

        self.comparisons += 1
        result = self.letter <= rs.letter
        return result
类字母:
定义初始(自我,字母):
断言字母.isalpha()和字母.isupper(),“无效字母”
self.letter=字母
self.count=0
self.compariations=0
返回
定义(自我):
返回“{}:{},{}”。格式(self.letter、self.count、self.comparations)
定义(自我,rs):
self.count+=1
自我比较+=1
结果=self.letter==rs.letter
返回结果
定义(自我,rs):
自我比较+=1
结果=自我字母i
(或
num
)是一个
str
,它没有
比较
属性。但是,您的
字母
对象确实如此。可以将它转换成一个
字母
,然后尝试使用
比较
,就像这样:
字母(i)。比较

编辑:

为什么比较总是空的原因是因为您从不将该变量与其他变量进行比较(这是比较递增的地方,请参见
字母中的
\uuuuuuueq\uuuuuuu
)。只有当你说出类似于
i=Letter(i)
的话,然后将
i
与类似于
i==1
的话进行比较,它们才会开始改变。只有这样,比较才会增加。

看起来
i
(或
num
)是一个
str
,它没有
比较
属性。但是,您的
字母
对象确实如此。可以将它转换成一个
字母
,然后尝试使用
比较
,就像这样:
字母(i)。比较

编辑:


为什么比较总是空的原因是因为您从不将该变量与其他变量进行比较(这是比较递增的地方,请参见
字母中的
\uuuuuuueq\uuuuuuu
)。只有当你说出类似于
i=Letter(i)
的话,然后将
i
与类似于
i==1
的话进行比较,它们才会开始改变。只有这样,您的比较才会增加。

您将self.comparison定义为类字母的值
num
是一个字符串值,因此为了使用它,您必须定义一个字母对象来使用比较。您将self.comparison定义为类字母的值
num
是一个字符串值,因此为了使用它,您必须定义一个字母对象来进行比较。