__repr__()
class A : def __init__(self,name): self.name=name #def __str__(self): # return '**%s**'%self.name def __repr__(self): return self.name a=A('alex') print(a)#类中没有__repr__()方法 也没有__str__()方法的时候 print(a)打印a对象的内存地址 #类中有了__repr__()方法后 没有__str__()方法 print(a) 打印alex #类中有__str__()方法 也有__repr__()方法 打印 **alex** print(str(a),repr(a))#str(obj)触发了__str__()方法 repr(obj)触发了 __repr__()方法 print('%s | %r'%(a,a))#%s触发了__str__()方法 %a触发了__repr__()方法 #print('----%r---'%('abc'))#r是'abc' #结论:repr(obj)和%r 调用___repr__()方法 #str(obj) %s 调用__str__()方法 #__repr__()方法是__str__()方法的备胎。如果有__str__()方法,那么print('%s) str(obj)都先去执行__str__()方法,并且使用__str__()方法的返回值 #如果没有__str__()方法,那么print('%s') str(oj)都会执行__repr__()方法 #只有__str__()方法的时候 print(str(a),repr(a))打印的是 **alex** <__main__.A object at 0x007BB9B0> #只有__str__()方法的时候 print('%s | %r'%(a,a))打印的是**alex** | <__main__.A object at 0x007BB9B0> #只有__repr__()方法的时候 print(str(a),repr(a))打印的是alex alex #只有__repr__()方法的时候 print('%s | %r'%(a,a))打印的是alex | alex
class A : def __init__(self,name): self.name=name def __str__(self): return '**%s**'%self.name def __repr__(self): return self.name class B(A): def __init__(self,name): self.name=name #def __str__(self): # return '***' def __repr__(self): return '~~~~' a=B('alex') print(a) print(str(a),repr(a))#当子类B中只有__init__()方法 print(str(a),repr(a))打印**alex** alex print('%s |%r'%(a,a))#当子类B中只有__init__()方法 print('%s |%r'%(a,a))打印**alex** |alex #当子类B中有__str__()方法 ,没有__repr__() print(str(a),repr(a))打印*** alex #当子类B中有__str__()方法 ,没有__repr__() print('%s |%r'%(a,a))打印*** alex #当子类B中有__repr__()方法,没有__str__() print(str(a),repr(a))打印**alex** ~~~~ #当子类B中有__repr__()方法,没有__str__() print("%s |%r'%(a,a))打印**alex** ~~~~ #----------结论:在子类中使用__str__()先找子类的__str__() 没有的话向上找,只要父类不是object,就执行父类的__str__()方法 #但是如果出了object之外的父类都没有__str__()方法,就执行子类的__repr__()方法,如果子类也没有,还要向上继续找父类中的__repr__()方法 #一直找不到 再执行object类中的__repr__()方法