2016-08-22 5 views
-3

を働いていない__delete__:Pythonは、私はこの単純な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 

それでは、どのように私は適切なpythonでのアイテムの削除を実装する必要がありますか?ご協力ありがとうございました。 del a['k']の動作を達成するために

+0

'デル(自己、キー):'これがために何を想定していますか?質問をする前に、機能するコードを投稿してください。 –

+0

'' del a [x] 'をタイプするときに呼び出される魔法のメソッドである' '__delete__'関数を実装したい場合、' __delete__'関数を実装する必要があります。つまり 'del'から' __delete__ 'の前に' def'を入れてください。 – syntonym

+2

@構文:Pythonでは、少なくとも* [記述子*]の外にはない '__delete__'フックメソッドはありません(https://docs.python.org/2/howto/descriptor .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]: {} 
関連する問題