类的内置方法
内置的类方法与内置函数之间有着密切的关系
双下方法:①obj.__str__ str(obj) ②obj.__repr__ repr(obj)
str方法:
class A:
pass
def __str__(self):
return 'A'
a = A()
print(str(a)) # 此时输出的为类A中的方法,若类A中午str方法则输出obj中的
print(a)
print('%s:%s'%('A',a)) # %s str() 直接打印 :实际上都是走的 __str__
repr方法:
class Teacher: def __init__(self,name,salary): self.name = name self.salary = salary def __str__(self): return 'Teacher is object: %s'%self.name def __repr__(self): return str(self.__dict__) def func(self): return 'lalala' zhangsan = Teacher('张三',5000) print(zhangsan) # 在直接调用print(对象),就是调用的zhangsan.__str__ print(str(zhangsan)) print(repr(zhangsan)) print('%r'%zhangsan) # %r 和 repr() 实际上走的都是__repr__方法
但是repr可以是str的备胎 反之则不行(即调用str方法时候,在类里找不到str可以去找repr)
print(obj) / '%s'%obj / str(obj) 的时候,实际上是内部调用了obj.__str__方法,如果有str方法,那么它返回的必定是一个字符串
如果没有__str__方法,会先找本类的__repr__方法,再没有就找父类的__str__
repr(obj),只会找__repr__,如果没有就找父类的
析构函数:在删除函数之前进行收尾工作
1 class A: 2 def __del__(self): 3 self.f.close() # 在文件操作符消失之前,先执行这个方法,关闭了文件 4 a = A() 5 a.f = open() # 打开文件 第一 在操作系统中打开一个文件 拿到了文件操作符存在了内存中 6 del a # a.f 拿到了文件操作符并消失在内存中
__call__方法:把实例对象作为函数调用,即实例化一个对象后,在对象后面加括号即可调用__call__方法
class A: def __init__(self,name): self.name = name def __call__(self,): for k in self.__dict__: print(self.__dict__[k]) # 打印这个对象的所有属性 a = A('张三') # a = A('张三')() a()
浙公网安备 33010602011771号