我知道我所做的可能不是最好的方法,但是现在我想不出另一种方式。
我基本上拥有的是:
class foo:
def __init__(self):
self.bar = ['bundy']
目前,我正在为我的类定义很多方法来返回列表中方法的结果,如下所示:
def __len__(self):
return len(self.bar)
当然,还有其他与bar
无关的方法和对象 - 我没有重新发明list
是否有更简单的方法来“复制”这些方法,这样我就不必一个一个地定义它们?
答案 0 :(得分:1)
您必须逐个定义一些方法,就像您正在做的那样。 但是,除了list之外,Python中还有一个基类,它为您提供了一个明确定义的方法,您需要提供哪些方法,并定义可以基于此最小集合的其余方法。
这些是提供的" abstract base classes" - 你想要的是将你的对象实现为"可变序列" - 他们只需要实现__getitem__, __setitem__, __delitem__, __len__, insert
即可拥有完整列表功能。
在python 3.x中,只需从collections.abc.MutableSequence
继承你的类并实现它们。 (在Python 2.7中,它是collection.MutableSequence
。)。
通过这样做,您将获得免费的__contains__, __iter__, __reversed__, index, count, append, reverse, extend, pop, remove
和__iadd__
方法。