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

How to test if a class had explicietly defined a __gt__?

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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调用定义了一个不等式属性

1
2
3
x1 = myclass1(5); x2 = myclass2(2)
x1 > x2
x2 < x1

在这两种情况下都将使用myclass1.__gt__。如果我定义了myclass2.__lt__,最后一行就会调用它。但我没有,所以x1__gt__在两个电话中都占了一席之地。我想我理解这一点(但欢迎评论)。

所以我的问题是:有没有一种方法可以知道为自定义类显式定义了哪些不等式?因为

1
hasattr(x2, '__gt__')

返回True


您可以在__dict__中为每个类检查:

1
2
3
4
5
'__gt__' in x2.__class__.__dict__
Out[23]: False

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

或者,为了不依赖衬垫而使用内置组件:

1
2
3
4
5
'__gt__' in vars(type(x1))
Out[31]: True

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