|
|
1
396
考虑这个简单的问题:
因此,Python默认使用对象标识符进行比较操作:
凌驾
在里面
Python 2
,始终记得覆盖
Python 3 ,这不再是必需的,因为 documentation 国家:
但这并不能解决我们所有的问题。让我们添加一个子类:
注: Python 2有两种类型的类:
regardless of the order of the operands
那么这里,如果
要解决
在这种情况下,操作员将比较操作委托给 反射法 的 另外 documentation 将反射方法定义为:
归还
我们到了吗?不完全是。我们有多少唯一的号码?
最终结果如下所示(我在最后添加了一些断言以进行验证):
|
|
|
2
217
您需要小心继承:
更严格地检查类型,如下所示:
除此之外,您的方法将很好地工作,这就是特殊方法的用途。 |
|
|
3
162
你描述的方式就是我一直做的方式。因为它是完全通用的,所以您可以将该功能分解为一个mixin类,并在您想要该功能的类中继承它。
|
|
|
4
17
这不是一个直接的答案,但似乎有足够的相关性,可以加上,因为它有时会节省一些冗长乏味的内容。直接从文档中剪切。。。 给定一个定义了一个或多个丰富比较排序方法的类,这个类装饰器提供其余的方法。 这简化了指定所有可能的富比较操作所涉及的工作:
该类必须定义其中一个
|
|
|
5
9
您不必同时覆盖这两者
|
|
|
6
6
https://stackoverflow.com/a/30676267/541136
我已经证明了这一点,尽管定义是正确的
你应使用:
|
|
|
7
4
我想你要找的两个术语是 平等 (==)和 身份 (是)。例如:
|
|
|
8
2
“is”测试将使用内置的“id()”函数测试标识,该函数本质上返回对象的内存地址,因此不可重载。 但是,在测试类的相等性时,您可能希望对测试更加严格,只比较类中的数据属性:
这段代码将只比较类的非函数数据成员,并跳过任何您通常想要的私有数据。对于普通的老Python对象,我有一个基类,它实现了uuu init_uuuuuu、uuuu str_uuu、uuuu repr_uuu和uuuuu eq_uuu,因此我的POPO对象不会承担所有额外(在大多数情况下是相同的)逻辑的负担。 |
|
|
9
2
用法:
|
|
|
10
2
这包含了对Algorias答案的评论,并通过单个属性比较对象,因为我不关心整个dict。
|
|
|
11
0
我编写了一个带有默认实现的自定义基
|