类型名称描述特殊属性__dict__获取类对象的所有属性和方法或获取实例对象所有属性的字典__class__获取实例对象的类__bases__输出父类类型的元组__base__输出基类,第一个继承父类__mro__类的分层结果的特殊方法__len__()重写该方法,使内置函数len()的参数可以是自定义类型__add__()重写该方法,可以使用一个带有“+”函数的自定义对象__new__()创建对象__init__()初始化创建的对象__subclasses__()获取子类列表代码示例:classA:passclassB:passclassC(A):passclassHuman(A,B):def__init__(self,name,age):self.name=nameself.age=agedefeat(self):print('Peopleeatallkinds')x=Human('a',22)print(x.__dict__)#实例对象的属性字典;{'name':'a','age':22}print(Human.__dict__)#类对象的属性和方法字典;{'__module__':'__main__','__init__':,'eat':,'__doc__':None}print(x.__class__)#输出对象所属的类;print(Human.__bases__)#输出父类类型的元组;(,)print(Human.__base__)#输出基类,第一个继承的父类;print(Human.__mro__)#类层次结果;(,,,)print(A.__subclasses__())#获取子类列表;[,]__add__()而不是+:a=1b=2c=a+bd=a.__add__(b)print(c,d)#33添加自定义类型必须重写__add__():classStudent:def__init__(self,name):self.name=namedef__add__(self,other):returnself.name+other.namestu1=Student('张三')stu2=Student('History')s=stu1+stu2print(s)#张三历史#不重写时抛出TypeError:unsupportedoperandtype(s)for+:'Student'and'Student'rewritethe__len__()方法,自定义__len__()的参数和返回内容:classStudent:def__init__(self,name):self.name=namedef__len__(self):returnself.name#returnlen(self.name)stu1=Student('张三')lst=[1,2,3]print(lst.__len__())#3print(stu1.__len__())#张三#不重写时,抛出AttributeError:'Student'objecthasnoattribute'__len__'__init__()and__new__()执行顺序:classPerson:def__init__(self,name,age):print('executed__init__(),self'sid:',id(self))self.name=nameself.age=agedef__new__(cls,*args,**kwargs):print('执行__new__(),idcls:',id(cls))object1=super().__new__(cls)print('创建对象的id:',id(object1))returnobject1print('对象类id的对象:',id(object))print('Personobject'sid:',id(Person))p1=Person('张三',22)#先执行“=”右边的代码,然后赋值print('p1实例对象id:',id(p1))输出结果:对象类对象id:140722564381520Person类对象id:1296646616816执行__new__(),clsid:1296646616816创建对象id:1296654563888__init__()被执行,self的id:1296654563888p1实例对象的id:1296654563888结论:先创建对象,再init初始化。