2012-10-16 5 views
2

첫째,이 질문에 가장 적합한 제목이 무엇인지 알 수 없습니다. 도전자 : "list.append을 맞춤 클래스에 구현하는 법"리스트에`append`를 호출하면 어떻게됩니까?

나는 Individual이라고하는 class입니다. 여기

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 클래스에서 해당 함수를 구현하면 원하는 동작을 얻을 수 있습니까?

if foo in indiv 기능을 활성화하려면 __contains__Individual에 구현할 수 있다는 것을 알고 있습니다. indiv.append(…) 기능을 사용하려면 어떻게해야합니까?

답변

7

.append()은 단순히 하나 개의 인수를 사용하는 방법입니다, 당신은 쉽게 하나를 직접 정의 할 수 없습니다 : 필요

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

마술 방법.

+0

젠장! 나는 터널 비전을 분명히 얻었다! 그래도'list.append'를 호출하면 어떻게 될지 설명해 주시겠습니까? – inspectorG4dget

+1

@ inspectorG4dget : 목록 유형 (C로 구현 됨)은 해석기에 의해 호출되는'.append()'메소드를 정의합니다. 그것은 하나의 주장을 기대합니다. 이 메서드는 요소를 목록에 추가합니다. C로 구현되는 것 외에는 별다른 마법이 없습니다. –

+2

@ inspectorG4dget : 사용자 정의 클래스에 목록을 래핑하는 ['UserList' 모듈] (http://hg.python.org/cpython/file/2.7/Lib/UserList.py)의 소스를 살펴보십시오. –

관련 문제