TypeError:unorderable类型:int()>广场()

时间:2015-01-10 11:23:00

标签: python class python-3.x

class Square:
    def __init__(self, value):
        self.size = value
    def __repr__(self):
        return '{0}' .format(self.size)
    def bigger_than(self, t):
        if self.size > t:
            return True
        else:
            return False
s = Square(8)
t = Square(7)
if s.bigger_than(t):
    print('The first square is bigger than the second one.')
else:
    print('The first square is not bigger than the second one.')

此错误消息如下:

Traceback (most recent call last):
  File "sourceFile", line 38, in <module>
    if s.bigger_than(t):
  File "sourceFile", line 14, in bigger_than
    if self.size > t:
TypeError: unorderable types: int() > Square()

我认为问题出现在bigger_than的某处,但我不太确定。我想要做的是添加一个方法,将方块的大小与另一个方块的大小进行比较,并输出方块是大还是小。

如果我尝试print()self.sizet,则会输出以下值:s = Square(8)t = Square(7)

1 个答案:

答案 0 :(得分:2)

您应该按如下方式实施:

class Square:

    def __init__(self, value):
        self.size = value

    def __repr__(self):
        return 'Square({0.size})'.format(self)

    def __gt__(self, other):
       return self.size > other.size


s = Square(8)
t = Square(7)

if s > t:
    print('The first square is bigger than the second one.')
else:
    print('The first square is not bigger than the second one.')

请注意,命名方法__gt__可以直接使用> g reater t han),我们正在明确比较{ {1}}两个参数的属性(size等同于s > ts.__gt__(t))。

我还将Square.__gt__(s, t)更改为:

  

看起来像一个有效的Python表达式,可用于重新创建具有相同值的对象(给定适当的环境)

您应该阅读the documentation了解有关这些&#34;魔术方法的更多信息&#34;。