如何测试一个类是否明确定义了一个__gt__?

时间:2016-07-30 06:51:54

标签: python python-3.x

有没有办法测试服装类是否明确定义了像__gt__这样的属性?把事情放在上下文中考虑这两个类:

class myclass1:
    def __init__(self, val):
        self.val = val

    def __gt__(self, other):
        if type(other) is int:
            return self.val > other
        else:
            return self.val > other.val


class myclass2:
    def __init__(self, val):
        self.val = val

因为我已经为myclass1定义了一个不等式属性,而没有为myclass2调用

x1 = myclass1(5); x2 = myclass2(2)
x1 > x2
x2 < x1
在这两种情况下,

都会使用myclass1.__gt__。如果我定义myclass2.__lt__,最后一行会调用它。但我没有。因此x1&#39; s __gt__在两次通话中都占有一席之地。我想我理解这一点(但欢迎提出意见)。

所以我的问题:有没有办法知道为自定义类明确定义了哪些不等式?因为

hasattr(x2, '__gt__')
无论如何,

返回True

1 个答案:

答案 0 :(得分:2)

您可以在每个班级的__dict__内查看:

'__gt__' in x2.__class__.__dict__
Out[23]: False

'__gt__' in x1.__class__.__dict__
Out[24]: True

或者,使用内置插件以不依赖于dunders:

'__gt__' in vars(type(x1))
Out[31]: True

'__gt__' in vars(type(x2))
Out[32]: False