2016-08-22 76 views
-3

我想这个简单的Python代码:蟒蛇__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 

那么我该如何正确实施项目删除在python中?感谢您的帮助。

+0

'德尔(自我,键):'这是什么应该是什么?在提问前请发布功能代码。 –

+0

如果你想实现'__delete__'函数(这是一个魔术方法,当你键入dela [x]'时),那么你应该实现'__delete__'函数,即将'del'重命名为'__delete__ '并在前面放置一个'def' – syntonym

+2

@syntonym:在Python中没有'__delete__'钩子方法,至少不在[*描述符*]之外(https://docs.python.org/2/howto/descriptor的.html)。有一个['__del__'方法](https://docs.python.org/2/reference/datamodel.html#object.__del__),但只有当对象本身从内存中删除时才会调用该方法。考虑到post中'method'的*实现*,我怀疑他们正在寻找['object .__ delitem__'](https://docs.python.org/2/reference/datamodel.html#object.__delitem__) 。 –

回答

3

为了实现del a['k']行为(即删除由索引项),你应该实现__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]: {}