我创建了自己的 Customset 类,它实现了 python 集合的几乎所有方法。 当我使用此自定义集的实例时,许多集合运算符都会失败。它们会失败,并显示类似以下内容的内容:
TypeError: unsupported operand type(s) for -: 'Customset' and Customset'
or
TypeError: '<=' notsupported acrossinstances of 'Customset' and Customset' '
失败的运算符包括:-、-=、&、&=、<、<=、>、>=、^、^=、|、|=、==
我希望它们能够映射到以下中记录的方法:
https://docs.python.org/3.12/library/stdtypes.html#set 和 https://www.w3schools.com/python/python_ref_set.asp
是对的,Python 集合运算符的文档没有明确说明每个运算符调用的是哪个方法。不过,这是 Python 中的标准行为,这些运算符到方法的映射是其数据模型的一部分。
以下是 Python 集合运算符与其对应特殊方法名称的映射表:
|
运算符
|
方法
|
用途
|
|-------------|--------------------|-------------------------------------------------------|
|
|
|
__or__
| 并集 |
|
|=
|
__ior__
| 更新后的并集 |
|
&
|
__and__
| 交集 |
|
&=
|
__iand__
| 更新后的交集 |
|
-
|
__sub__
| 差集 |
|
-=
|
__isub__
| 更新后的差集 |
|
^
|
__xor__
| 对称差集 |
|
^=
|
__ixor__
| 更新后的对称差集 |
|
==
|
__eq__
| 相等性 |
|
!=
|
__ne__
| 不等性 |
|
<
|
__lt__
| 子集 |
|
<=
|
__le__
| 子集或相等 |
|
>
|
__gt__
| 超集 |
|
>=
|
__ge__
| 超集或相等 |
|
in
|
__contains__
| 成员资格测试 |
为了使的自定义集合类能与这些运算符一起使用,需要在类中实现相应的特殊方法。
例如,要支持
-
运算符(差集),需要在的
Customset
类中定义
__sub__
方法:
class Customset:
# ... 其他方法 ...
def __sub__(self, other):
# 在此处实现集合差集的逻辑
# 并返回一个新的 Customset 实例
通过为每个想要支持的集合运算符实现相应的特殊方法,就可以使的
Customset
类与 Python 的内置集合类型一样工作。