有没有办法子类化
set
,让二元运算符返回子类类型,而不需要重新定义它们?
示例:
class A(set):
pass
a = A([1,2,3]) & A([1,2,4])
a.__class__ == A # it's False, and I would like it to be true without redefining all operators
我相信答案是“否”。
当我浏览参考实现时,看起来二进制
AND
的所有路径似乎最终都会返回NULL
或调用make_new_set_basetype()
的结果。
该方法当前实现为:
make_new_set_basetype(PyTypeObject *type, PyObject *iterable)
{
if (type != &PySet_Type && type != &PyFrozenSet_Type) {
if (PyType_IsSubtype(type, &PySet_Type))
type = &PySet_Type;
else
type = &PyFrozenSet_Type;
}
return make_new_set(type, iterable);
}
因此,如果不覆盖子类中的
__and__()
,您将返回的是 set()
或 frozenset()
。