有没有办法测试服装类是否明确定义了像__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
。
答案 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