当你在列表上调用`append`时会发生什么?

时间:2012-10-16 18:34:34

标签: python class append implementation

首先,我不知道这个问题的最合适的标题是什么。竞争者:“如何在自定义类中实现list.append

我有class名为Individual。这是班级的相关部分:

from itertools import count
class Individual:
    ID = count()
    def __init__(self, chromosomes):
        self.chromosomes = list(chromosomes)
        self.id = self.ID.next()

以下是我要对这个课程做的事情:

假设我实例化一个没有染色体的新个体:indiv = Individual([]),我想稍后为这个人添加染色体。目前,我必须这样做:

indiv.chromosomes.append(makeChromosome(params))

相反,我理想的做法是:

indiv.append(makeChromosome(params))

具有相同的效果。

所以我的问题是:当我在列表上调用append时,真正发生了什么?是否有被调用的__append__(或__foo__)?在Individual课程中实现该功能会让我得到理想的行为吗?

我知道,例如,我可以在__contains__中实施Individual以启用if foo in indiv功能。我该如何启用indiv.append(…)功能?

1 个答案:

答案 0 :(得分:7)

.append()只是一个接受一个参数的方法,您可以自己轻松定义一个:

def append(self, newitem):
    self.chromosomes.append(newitem)

不需要魔术方法。