2011-04-29 5 views
4

파이썬의 list 대체품을 만들고 싶습니다. 항목을 추가하거나 제거 할 때 알 수 있습니다. 목록의 하위 클래스 또는 목록 인터페이스를 구현하는 항목이 똑같이 잘 수행됩니다. 나는 모든 목록의 기능을 다시 구현할 필요가없는 솔루션을 선호합니다. 그것을 할 수있는 쉬운 + pythonic 방법이 있습니까?Python의 목록에서 항목을 추가/제거하는 데 걸리는 작업

의사 코드는 :

class MyList(list): 
    # ... 
    def on_add(self, items): 
     print "Added:" 
     for i in items: 
      print i 

    # and the same for on_remove 

l = MyList() 
l += [1,2,3] 
# etc. 
+2

'append','extend' 그리고 (좀 더 까다 롭습니다)'__setitem__'을 오버라이드 할 필요가 있다고 생각합니다. –

+0

'list' (올바른 일이지만 조금 까다 롭습니다)를 대신하는 대신 필요한 API 만 구현하는 목록에 작은 래퍼를 작성할 수 있습니다. –

답변

2

documentation for userlist는 파이썬 < 2.2와 함께 작동하도록 코드를 필요로하지 않는 경우 list을 하위 클래스 알려줍니다. 아마도 요소를 추가/제거 할 수있는 메서드를 재정의 (override)하지 않는 것이 좋습니다. 슬라이싱 연산자가 포함됩니다. 당신은 아마 할 필요가

class MyList(list): 
    def __iadd__(self, *arg, **kwargs): 
     print "Adding" 
     return list.__iadd__(self, *arg, **kwargs) 

:

5

당신이 당신이, 오버라이드 (override) 예 이것에 대한 시도 할 수 있습니다 무엇을 볼 수

다음
>>> dir(list) 

할 수있는 목록에 정의되어 어떤 기능을 확인하려면 그 중 몇 가지를 모두 얻으십시오.

+0

'__iadd__'였습니다. 나는'__setitem__'을 시도해 보았고 왜 컨트롤이 그것을 따라 가지 않았는지 궁금해하고있었습니다. –

관련 문제