双下方法
__repr__ __str__
__str__方法 必然返回字符串
‘%s’%(对象) print(str(a)) print(直接打印对象)都是走类中__str__ %r repr() 实际上都是走repr repr class A: def __str__(self): return '父类str打印中' #如果是数字类的 需要str(1) 再返回 def __repr__(self): return '父类repr打印中' class B(A): def __str__(self): return '子类str打印中' def __repr__(self): return '子类repr打印中' a = B() print('%s'%(a)) #子类str打印中 print(a) #子类str打印中 print(str(a)) #子类str打印中 print('%r'%(a)) #子类repr打印中 print(repr(a)) #子类repr打印中
如果子类中没有__str__就先用父类的str 父类没有str就先用子类的repr
class A: def __str__(self): return '父类str打印中' def __repr__(self): return '父类repr打印中' class B(A): def __repr__(self): return '子类repr打印中' a = B() print('%s'%(a)) #父类str打印中 print(str(a)) class A: def __repr__(self): return '父类repr打印中' class B(A): def __repr__(self): return '子类repr打印中' a = B() print('%s'%(a)) 子类repr打印中 class A: def __repr__(self): return '父类repr打印中' class B(A): pass a = B() print('%s'%(a)) 父类repr打印中
__del__ 如果直接执行del方法是 例如删除一个对象 他会将连带的 对象.f = open() 一块删除 但实际上改文件并没有关掉,所以需要用到__del__方法 在del时就会调用类中的__del__
此时将 关闭文件的操作放到下面 变成先关闭文件再删除对象,完美解决
class A: def __del__(self): print('aaa') self.f.close() a = A() a.f = open('y.py') del a
__call__
一个对象加上() a()就会执行__call__方法下面的功能,此方法适用于给程序添加一些小功能 简化了代码
__len__
class A: def __init__(self,classes): self.classes = classes self.names = [] def __len__(self): return len(self.names) a = A('xioming') a.names.append('ergou') a.names.append('ergou') a.names.append('ergou') a.names.append('ergou') print(len(a)) print(a.names) print(a.classes)