Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python\uuuu delete\uuuu不工作_Python_Python 3.x - Fatal编程技术网

python\uuuu delete\uuuu不工作

python\uuuu delete\uuuu不工作,python,python-3.x,Python,Python 3.x,我正在尝试以下简单的python代码: 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>", li

我正在尝试以下简单的python代码:

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
>a=a()
>>>dela['k']
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:“A”对象不支持项删除

那么,我应该如何在python中正确地实现项删除呢?谢谢您的帮助。

为了实现
dela['k']
(即按索引删除项目)的行为,您应该实现以下神奇方法:

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]: {}

为了实现
dela['k']
的行为(即按索引删除项目),您应该实现以下神奇方法:

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]: {}

del(self,key):
这应该是什么?提问前请发布功能代码。如果您想实现
\uuuuu delete\uuuuu
功能(这是一种神奇的方法,当您“键入”
dela[x]
时会调用)然后您应该实现
\uuuuu delete\uuuuu
功能,即将
del
重命名为
\uuuu delete\uuuu
并在front@syntonym:Python中没有
\uuuuu delete\uuuu
钩子方法,至少在外部没有。有一个,但只有当对象本身从内存中删除时才会调用。考虑到帖子中“方法”的实现,我怀疑他们在寻找。@MartijnPieters有一个我用错了:@Lærne:对,这是在描述符上,描述符是可以添加到类中的对象,当你通过类的实例与它们交互时,它们会被调用方法。这就是绑定方法和
property
对象的方式。糟糕的是,我忘记了
\uuuu delete\uuuu
甚至已经存在(我只是忘记了那个钩子的名字,我不经常需要使用它)。
del(self,key):
这应该是什么?提问前请发布功能代码。如果您想实现
\uuuuu delete\uuuuu
功能(这是一种神奇的方法,当您“键入”
dela[x]
时会调用)然后您应该实现
\uuuuu delete\uuuuu
功能,即将
del
重命名为
\uuuu delete\uuuu
并在front@syntonym:Python中没有
\uuuuu delete\uuuu
钩子方法,至少在外部没有。有一个,但只有当对象本身从内存中删除时才会调用。考虑到帖子中“方法”的实现,我怀疑他们在寻找。@MartijnPieters有一个我用错了:@Lærne:对,这是在描述符上,描述符是可以添加到类中的对象,当你通过类的实例与它们交互时,它们会被调用方法。这就是绑定方法和
property
对象的方式。糟糕的是,我甚至忘记了
\uuuuu delete\uuuuuu
(我只是忘记了那个钩子的名字,我不经常需要使用它)。