len(self):

如果一个类表现得像一个list,要获取有多少个元素,就得用 len() 函数。

要让 len() 函数工作正常,类必须提供一个特殊方法__len__(),它返回元素的个数。

  1. class A:
  2. def __init__(self,*args):
  3. self.name = arg
  4. pass
  5. def __len__(self):
  6. return len(self.name)
  7. a = A("32","asda",435)
  8. print(len(a))

返回对象实例的“长度”

getitem(self, key)

凡是在类中定义了这个__getitem__方法,那么它的实例对象(假定为p),可以像这样p[key]取值,当实例对象做p[key]运算时,会调用类中的方法__getitem__

一般如果想使用索引访问元素时,就可以在类中定义这个方法(__getitem__(self, key))。

  1. import numpy as np
  2. import torch
  3. class DataBase:
  4. '''Python 3 中的类'''
  5. def __init__(self, id, address):
  6. '''初始化方法'''
  7. self.id = id
  8. self.address = address
  9. self.d = {self.id: 1,
  10. self.address: "192.168.1.1",
  11. }
  12. def __getitem__(self, key):
  13. # return self.__dict__.get(key, "100")
  14. return self.d.get(key, "default")
  15. data = DataBase(1, "192.168.2.11")
  16. print(data["hi"])
  17. print(data[data.id])

具体解释

  1. __getitem__这种由两个双下划线构成的方法,被称之为魔术方法。
  2. 魔术方法是为了给python解释器用的,当使用len(collection)时,实际上调用的就是collection.__len__方法。而在使用obj[key]的形式访问元素时,实际上调用的时obj.__getitem__(key)方法。
  3. 魔术方法是属于类的方法吗,也就说不需要实例化类就可以访问到该访问,同时,实例化的对象都可以访问到该方法。
  4. 使用__getitem__方法和__len__方法,我们就可以实现要给对自定义数据类型的迭代和访问。