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)的來源,它將自定義類中的列表包裝起來。 –