2

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

我有一个classIndividual. 这是课程的相关部分:

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(…)功能?

4

1 回答 1

7

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

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

不需要魔法方法。

于 2012-10-16T18:36:35.400 回答