gpt4 book ai didi

python - 如何断言类覆盖默认的 __hash__ 和 __eq__

转载 作者:太空宇宙 更新时间:2023-11-03 14:23:09 25 4
gpt4 key购买 nike

我正在用 python 编写类装饰器。作为装饰器的一部分,我想断言该类不使用默认的 __eq____hash__ 方法。我该怎么做?

@identifer # should throw AssertionError
class X(object):
pass

我探索了这些(除了谷歌搜索和查看文档):

hasattr(X, '__eq__') # True :(

xeq, oeq = X.__eq__, object.__eq__
xeq is oeq # False :(
xeq == oeq # False :(

'__eq__' in X.__dict__ # False :)?

测试该类的 __dict__ 似乎有效,但如果该类从父类(super class)继承方法,它似乎不起作用。所以我可以遍历继承图来寻找方法,但我想先知道是否有更清晰的实现。

这是在 2.7 中,但也希望它在 3.x 中工作

最佳答案

如果整个类层次结构需要计数,你可以使用:

all('__eq__' not in cls.__dict__ for cls in X.mro() if cls is not object)

只有当 MRO 中的任何类(object 除外)中没有 __eq__ 属性时,才返回 True。这不适用于旧式 Python 2 类,因为它们没有 class.mro() method。 , 然而。

关于python - 如何断言类覆盖默认的 __hash__ 和 __eq__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24860798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com