蟒蛇__delete__不工作
问题描述:
我想这个简单的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中?感谢您的帮助。
答
为了实现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]: {}
'德尔(自我,键):'这是什么应该是什么?在提问前请发布功能代码。 –
如果你想实现'__delete__'函数(这是一个魔术方法,当你键入dela [x]'时),那么你应该实现'__delete__'函数,即将'del'重命名为'__delete__ '并在前面放置一个'def' – syntonym
@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__) 。 –