【发布时间】:2023-02-01 01:19:19
【问题描述】:
我想将__add__和__radd__添加到python基类set。
代码可以很简单
def __add__(self, other) :
assert isinstance(other, set), \
"perhaps additional type checking or argument validation can go here but" + \
" strictly only defined for pure python sets"
return set( list(self) + list(other) )
def __radd__(self, other) :
assert isinstance(other, set), \
"perhaps additional type checking or argument validation can go here but" + \
" strictly only defined for pure sets"
return set( list(other) + list(self) )
这个的 pythonic 实现是什么?如何在不创建自己的 MySet 类(将 set 作为父类)的情况下扩展基类?我可以只使用set.__add__ = some_function_I_defined吗?
【问题讨论】:
-
什么基类?您是否自己创建了基类?
-
您的意思是要将此行为添加到所有现有的
set()实例吗?否则创建一个子类真的会更简单。 -
一般来说,是的,你可以只将一个函数分配给一个新的类属性,但你不能像
set那样将新的类属性添加到内置类中。 -
不过,这是非常不标准的。尽管多组支持不同的并集和加法运算,这两个运算对于集合是等价的。只需使用
|和|=,而不是让你的代码的未来读者想知道为什么你不是. -
尝试向任何类型的内置类或库类添加方法都是一个坏主意。相反,创建一个子类并将它们添加到其中。
标签: python class parent-child