将子对象的方法放在我的班级中

时间:2017-01-03 20:14:23

标签: python class methods

我知道我所做的可能不是最好的方法,但是现在我想不出另一种方式。

我基本上拥有的是:

class foo:
    def __init__(self):
        self.bar = ['bundy']

目前,我正在为我的类定义很多方法来返回列表中方法的结果,如下所示:

def __len__(self):
    return len(self.bar)

当然,还有其他与bar无关的方法和对象 - 我没有重新发明list

是否有更简单的方法来“复制”这些方法,这样我就不必一个一个地定义它们?

1 个答案:

答案 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__方法。