如何验证 class 是否实现了丰富的比较方法?
How to verify if class implements a rich comparison method?
使用旧样式 classes 只需使用 hasattr
即可:
>>> class old:
... pass
...
>>> hasattr(old, '__eq__')
False
使用新样式 classes 每个 class 都有属性 __eq__
:
>>> class nsc(object):
... pass
...
>>> hasattr(nsc, '__eq__')
True
这是预期的行为,因为 hasattr(object, '__eq__')
也是 returns True
。对于每一种丰富的比较方法都是如此。
如果我不能使用 hasattr
,如何验证 class 是否实现了丰富的比较方法?我想到的一件事是调用该方法并查看它是否引发 NotImplemented
异常。但是调用这些方法可能会有意想不到的伤害。
您可以使用 dir
而不是 hasattr
来完成。丰富的比较方法不会出现在 dir
函数返回的列表中。
>>> class nsc(object):
... pass
...
>>> '__eq__' in dir(nsc)
False
使用旧样式 classes 只需使用 hasattr
即可:
>>> class old:
... pass
...
>>> hasattr(old, '__eq__')
False
使用新样式 classes 每个 class 都有属性 __eq__
:
>>> class nsc(object):
... pass
...
>>> hasattr(nsc, '__eq__')
True
这是预期的行为,因为 hasattr(object, '__eq__')
也是 returns True
。对于每一种丰富的比较方法都是如此。
如果我不能使用 hasattr
,如何验证 class 是否实现了丰富的比较方法?我想到的一件事是调用该方法并查看它是否引发 NotImplemented
异常。但是调用这些方法可能会有意想不到的伤害。
您可以使用 dir
而不是 hasattr
来完成。丰富的比较方法不会出现在 dir
函数返回的列表中。
>>> class nsc(object):
... pass
...
>>> '__eq__' in dir(nsc)
False