在继承的 class 数据结构中更新自身
Update self in an inherited class data structure
我想继承和修改 Python 列表 class 以添加额外的功能 - 即删除元素的所有实例的方法:
class NewList(list):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.__list__ = self
def rm_all(self, qw):
rm = [x for x in self if x != qw]
return rm
所以,如果我这样做:
l = NewList([1,2,1,3,2,1,2,1,3,1,1,2])`
print(l.rm_all(1))
输出为:
[2, 3, 2, 2, 3, 2]
但是,列表保持不变(我需要调用 l = l.rm_all(1)
来更新)。而在 Python 列表中,如果我使用 l.remove(2)
,列表会自动更新。
如何将这种功能合并到我新继承的 class - 即当我输入 l.rm_all(1)
时列表会自动更新?
我想我需要重新分配 self
但我想不通。
因为它是 list
的元 class,您可以尝试使用以下方法更改 self
的值:
class NewList(list):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.__list__ = self
def rm_all(self, qw):
self[:] = [x for x in self if x != qw]
l = NewList([1,2,1,3,2,1,2,1,3,1,1,2])
l.rm_all(1)
print(l)
我想继承和修改 Python 列表 class 以添加额外的功能 - 即删除元素的所有实例的方法:
class NewList(list):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.__list__ = self
def rm_all(self, qw):
rm = [x for x in self if x != qw]
return rm
所以,如果我这样做:
l = NewList([1,2,1,3,2,1,2,1,3,1,1,2])`
print(l.rm_all(1))
输出为:
[2, 3, 2, 2, 3, 2]
但是,列表保持不变(我需要调用 l = l.rm_all(1)
来更新)。而在 Python 列表中,如果我使用 l.remove(2)
,列表会自动更新。
如何将这种功能合并到我新继承的 class - 即当我输入 l.rm_all(1)
时列表会自动更新?
我想我需要重新分配 self
但我想不通。
因为它是 list
的元 class,您可以尝试使用以下方法更改 self
的值:
class NewList(list):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.__list__ = self
def rm_all(self, qw):
self[:] = [x for x in self if x != qw]
l = NewList([1,2,1,3,2,1,2,1,3,1,1,2])
l.rm_all(1)
print(l)