Python 设置实例之间的加法、减法、并集

Python 设置实例之间的加法、减法、并集,python,python-3.x,Python,Python 3.x,我需要在类中定义哪些方法才能将以下内容添加到一起: combined_set = set('a') | MyInstance # want to get set(['a', MyInstance]) // instance is hashable TypeError: unsupported operand type(s) for |: 'set' and 'MyInstance' 使用重载运算符|、&、-和^的集合的并集、交点、差分和对称差分必须在两个集合上进行,而不是在一个集合和单个元素上

我需要在类中定义哪些方法才能将以下内容添加到一起:

combined_set = set('a') | MyInstance
# want to get set(['a', MyInstance]) // instance is hashable
TypeError: unsupported operand type(s) for |: 'set' and 'MyInstance'

使用重载运算符
|
&
-
^
的集合的并集、交点、差分和对称差分必须在两个集合上进行,而不是在一个集合和单个元素上进行。但是您可以编写
{MyInstance}
而不是
MyInstance
来拥有一个包含单个元素的集合

>>_集={'a'}
>>>元素='b'
>>>|u集{element}
{'a','b'}
>>>_集&{element}
集合()
>>>_集-{element}
{'a'}
>>>_集^{element}
{'a','b'}

正如HeapOverflow指出的,如果使用
并集
交集
差分
对称_差分
方法而不是重载运算符,则参数只需要是一个可数,不一定是一个集合;但这对你的情况没有帮助。

你可以用以下方法之一:

combined_set=set(('a',MyInstance))
组合_set=set('a')|{MyInstance}
组合_集=集('a')
组合_set.add(MyInstance)
您可以定义

__ior__(self, value)
为了你们班

其中值可以是一个集合或类的另一个实例


当然,您的类需要从set继承。

|
是set union的运算符,您能更具体地说明您正在尝试做什么吗?我忘了解释自己:您的标题、您文章中的实际问题以及尝试的解决方案都指向希望让
MyInstance
实现set操作。另一方面,所需的输出表明您只是在尝试向集合中添加对象。这是哪一个?对运算符来说是这样,但对方法来说不是这样。例如,
{'a'}.union('b')
成功地产生了
{'b','a'}
,我不必写
{'a'}.union({'b'})
。虽然我承认我在这里有点鬼鬼祟祟,让它看起来好像我可以只写一个元素,而事实并非如此:-)。但它也不是一个集合。是的,这是有效的,因为单个字符串是可写的,如果你对它进行迭代,你只会得到字符串本身作为唯一的元素。这很少会成为用例,但我已经编辑以澄清我指的是重载操作符(没有这种行为)。