# -*- coding:utf-8 -*- class Teacher: def __init__(self,name,salary): self.name = name self.salary = salary def __str__(self): return "Teacher's object :%s"%self.name #必须返回str # def __repr__(self): # return str(self.__dict__) nezha = Teacher('哪吒',250) print(nezha) print(str(nezha)) print(repr(nezha)) print('%r'%nezha) #如果类里没有__str__方法 返回值为:<__main__.Teacher object at 0x000001E239CC5588> #如果类里有 __str__ 方法,返回值为:return里的内容: Teacher's object :哪吒 # print('-------------------------------------------------------------------------------') class Teacher: def __init__(self,name,salary): self.name = name self.salary = salary def __repr__(self): return str(self.__dict__) #必须返回str nezha = Teacher('哪吒',250) print(nezha) print(str(nezha)) print(repr(nezha)) print('%r'%nezha) print('-------------------------------------------------------------------------------') class Teacher: def __init__(self,name,salary): self.name = name self.salary = salary def __str__(self): return "Teacher's object :%s"%self.name #必须返回str nezha = Teacher('哪吒',250) print(nezha) print(str(nezha)) print(repr(nezha)) print('%r'%nezha) # s% obj% str(obj) print(obj) 都是走的 obj.__str__ 方法 # %r repr() 实际上走的是 __repr__ # __repr__ 是 __str__的备胎 当类中没有 str方法的时候 、会去找 __repr__、最后找 object # 但是 _str__不能做__repr__的备胎 如果累中没有 __repr__ 找找 object #如果 __str__ 和 __repr__ 只能实现一个 选择 __str__ # __len__ #定制长度,如果人数,数量,库存等 # 内置len可以和__len__协同使用 class Classes: def __init__(self,name): self.name = name self.student = [] def __len__(self): return len(self.student) #班级的人数, s9 = Classes("九期") s9.student.append("哪吒") s9.student.append("三太子") print(len(s9)) # __del__ 析构方法,当对象在内存中释放时,自动触发执行 class A: def __del__(self): print("执行次方法了") #作用在删除一个对象之前做一些收尾工作 self.f.close() #作用在删除一个对象之前做一些收尾工作 a = A() a.f = open('client.py') # 打开文件1.在操作系统中打开了一个文件,拿到了文件操作符在内存中 del a # a.f 文件操作符从内存中消失 # del a # del 即删除了变量,又执行了这个方法(先执行方法,后删除变量) # print(a) #就算不执行__del__ 当程序执行完毕,也会删除a # __call__ #一个对象加上()相当于执行了__call__方法 class A: def __init__(self,name,age): self.name = name self.age = age def __call__(self): print("执行我了") ''' a() 在一个对象使用前执行__call__方法/可以用来实现一些功能 ''' for k in self.__dict__: print(k,self.__dict__[k]) a = A('name',55) a() #一个对象加上()相当于执行了__call__方法