python四个重要魔法方法__len__,__getitem__,__setitem__,__delitem__

python中除了可以使用内建的类型,如list,tuple,dict,还可以创建自己的对象来实现像这些内建类型的访问,不过需要在定义类的时候对一些魔法方法逐一实现。

如下:

 
  1. class DictDemo:

  2. def __init__(self,key,value):

  3. self.dict = {}

  4. self.dict[key] = value

  5. def __getitem__(self,key):

  6. return self.dict[key]

  7. def __setitem__(self,key,value):

  8. self.dict[key] = value

  9. dictDemo = DictDemo('key0','value0')

  10. print(dictDemo['key0']) #value0

  11. dictDemo['key1'] = 'value1'

  12. print(dictDemo['key1']) #value1


上面的对象就相当于自己创建了一个内建类型相似的字典,当实例中有类似字典的操作的时候

比如:

 
  1. dictDemo1 = {"key0":"value0"}

  2. print(dictDemo1["key0"]) #value0


实例dictDemo["key0"]就类似上面的的操作,则会自动调用类中定义的方法__getitem__,输出在该方法返回的值

再看看dictDemo["key1"] = "value1",就是字典的操作,会自动调用类中定义的方法__setitem__,来设置相应的值

还有一个__del__,就是当我们要删除一个元素的时候调用(魔法方法会自动调用)

 __len__ 如下:

当要使用内建函数len(),而参数是DictDemo的实例的时候,那一定要实现类型中的__len__()方法

 
  1. class DictDemo:

  2. def __init__(self,key,value):

  3. self.dict = {}

  4. self.dict[key] = value

  5. def __getitem__(self,key):

  6. return self.dict[key]

  7. def __setitem__(self,key,value):

  8. self.dict[key] = value

  9. def __len__(self):

  10. return len(self.dict)

  11. dictDemo = DictDemo('key0','value0')

  12. print(dictDemo['key0']) #value0

  13. dictDemo['key1'] = 'value1'

  14. print(dictDemo['key1']) #value1

  15. print(len(dictDemo)) #2


上述就是这四个魔法方法的简单介绍。

猜你喜欢

转载自blog.csdn.net/u012501054/article/details/81738570