首先,我不知道这个问题的最合适的标题是什么。竞争者:“如何在自定义类中实现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(…)
功能?
答案 0 :(得分:7)
.append()
只是一个接受一个参数的方法,您可以自己轻松定义一个:
def append(self, newitem):
self.chromosomes.append(newitem)
不需要魔术方法。