2

まず、この質問に最も適切なタイトルが何であるかわかりません。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__実装できることを知っています。機能を有効にするにはどうすればよいですか?Individualif foo in indivindiv.append(…)

4

1 に答える 1

7

.append()は単に1つの引数を取るメソッドであり、自分で簡単に定義できます。

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

魔法の方法は必要ありません。

于 2012-10-16T18:36:35.400 に答える