请问 __getitem__ __setitem__ __getattr__ 继承于基类object吗?

getattribute setattr都继承于基类object,如图,
getitem, setitem , getattr 在基类object去找不到,这是因为?

图片说明!

图片说明

图片说明

getitem, setitem是序列,映射类型才有的, 比如字符串, 列表, 字典: getitem(key)方法用来访问个体元素。对序列类型,key只能是非负整数,对映射类型,关键字可以是任意Python不变对象。 setitem()方法给一个元素设定新值

__getattr__需要自己定义: 访问一个类实例 x 的属性时,比如 x.a,解释器会先查找 x.__dict__["a"],若没有找到,则接着查询 x.__class__.__dict__["a"],如果还没找到,则按照上面提到的搜索顺序继续查询该类的父类们的名字空间,如果还是没有找到,就要查看该类是否定义了__getattr__()方法,如果有这个方法就使用这个方法继续查找。

你可以通过dir(object)来查看所有object这个基类下定义的所有属性和方法,你会发现这里面并没有你说的__getitem__,__setitem__等方法,
所以你当然无法通过object.属性or方法来调用了。而且你的概念很模糊,不应该说这些方法继承于某个类,而应该说哪些子类继承于哪个父类。
父类的方法和属性必然被子类继承,而子类的方法和属性可以在父类的基础上扩展,父类可能没有子类的方法,并且在子类中可以重新定义
父类中的方法从而实现覆盖。说到这里,建议你查看dir(object)的所有属性和方法,然后再看看所有继承于object的这些类,譬如int/list/tuple等,
dir(int),dir(list),dir(tuple),这样就清楚看出object的这些方法都能在这些子类中找到,而像__getitem__这种的只能在某些子类中找到,如str、
list类中。