Home > Software design >  How to decorate a list with deleter
How to decorate a list with deleter

Time:02-04

I am creating decorator to a list to set, get, and delete values. But the deleter decorator is working. when I call del object[key], it doesn't actually do what I expect (print('dellllllll')).

class ListProperty:
    def __init__(self) -> None:
        self._l = []
        
    @property
    def l(self):
        return self._l
    
    @l.setter
    def l(self, value):
        self._l.append(value)
        print('settttttttt')
        
    @l.deleter
    def l(self, key):
        del self._l[key]
        print('dellllllll')
        
ob = ListProperty()
print(ob.l)
ob.l = 5
print(ob.l)
ob.l = 100
print(ob.l)
del ob.l[0]
print(ob.l)
        

What am I missing in calling del

CodePudding user response:

you can't pass key on deleter because it expects a argument not a key.

in alternative way you can use this :

class ListProperty:
    def __init__(self) -> None:
        self._l = []
        
    @property
    def l(self):
        return self._l
    
    @l.setter
    def l(self, value):
        self._l.append(value)
        print('settttttttt')

    @l.deleter
    def l(self):
        self._l = []
        print('deleted all')
        
    def pop(self, index):
        self._l.pop(index)
        print('dellllllll')
        
ob = ListProperty()
print(ob.l)
ob.l = 5
print(ob.l)
ob.l = 100
print(ob.l)
ob.pop(0)
print(ob.l)
del ob.l
print(ob.l)
  •  Tags:  
  • Related