2
首先,我不知道这个问题最合适的标题是什么。竞争者:“如何在自定义类中实现list.append
”。我有一个class
叫Individual
。下面是类的相关部分:当你在列表中调用`append`时会发生什么?
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
课程中实现该功能会让我获得所需的行为吗?
我知道,例如,我可以在Individual
中实现__contains__
以启用if foo in indiv
功能。我将如何去启用indiv.append(…)
功能?
该死!我显然得到隧道视野哈哈!不过,请你解释当我调用list.append时会发生什么? – inspectorG4dget
@ inspectorG4dget:列表类型(在C中实现)定义了一个方法'.append()',该方法由解释器调用;它期待一个论点。该方法将元素添加到列表中。除了在C中实现,它没有什么神奇的。 –
@ inspectorG4dget:查看['UserList'模块](http://hg.python.org/cpython/file/2.7/Lib/UserList.py)的来源,它将自定义类中的列表包装起来。 –