2016-08-22 2 views
-3

작동하지 __delete__ :파이썬 내가이 간단한 파이썬 코드를 시도하고

class A: 
    def __init__(self): 
    self.a = { 'k' : 'kk' } 
    def __delete__(self, key): 
    del self.a[key] 

이 간단한 클래스는 작동하지 않습니다.

>>> a = A() 
>>> del a['k'] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'A' object does not support item deletion 

그래서 어떻게 적절한 파이썬에서 항목 삭제를 구현해야합니까? 도와 줘서 고마워. del a['k']의 동작을 달성하기 위해

+0

'델 (자체, 키) :'이 될 무슨 뜻입니까? 질문하기 전에 작동 코드를 게시하십시오. –

+0

''del a [x]'를 타이프 ​​할 때 호출되는 마법 메서드 인'__delete__' 함수를 구현하려면'__delete__' 함수를 구현해야합니다. 즉'del'을'__delete__ '앞에'def '를 넣으시오. – syntonym

+2

@ 구문 : 파이썬에는 적어도 [* descriptors *] (https://docs.python.org/2/howto/descriptor) 밖에서는 훅을 사용하지 않는'__delete__' 메서드가 없습니다. .html). ['__del__' 메소드] (https://docs.python.org/2/reference/datamodel.html#object.__del__)가 있지만 객체 자체가 메모리에서 삭제 될 때만 호출됩니다. 게시물의 '메소드'구현 *을 감안할 때, 나는 그들이 ['object .__ delitem__'] (https://docs.python.org/2/reference/datamodel.html#object.__delitem__)을 찾고 있다고 의심합니다. . –

답변

3

당신이 __delitem__ 매직 메소드를 구현해야한다 (즉 인덱스 항목을 삭제) :

In [1]: class A: 
    ...:  def __init__(self): 
    ...:   self.a = {'k': 'kk' } 
    ...:  def __delitem__(self, key): 
    ...:   del self.a[key] 
    ...:   

In [2]: a = A() 

In [3]: a.a 
Out[3]: {'k': 'kk'} 

In [4]: del a['k'] 

In [5]: a.a 
Out[5]: {} 
관련 문제