当你调用一个列表`append`会发生什么?(What happens when you call

2019-09-24 04:37发布

首先,我不知道这个问题的最合适的标题会是什么。 竞争者:“如何实现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(…)的功能?

Answer 1:

.append() is simply a method that takes one argument, and you can easily define one yourself:

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

No magic methods required.



文章来源: What happens when you call `append` on a list?