1.__str__是个内置的方法,无需使用者去调用,其会在满足某一条件时自动触发.那么要触发它运行都有哪些条件呢?
有三种条件,分别为:print , str , %s
2.__repr__同样是个内置方法,无需使用者去调用,其会在满足某一条件时自动触发.那么要触发它运行都有哪些条件呢?
有以下种条件,分别为:print , str , %s , repr , %r
3.注意:__str__ 与 __repr__ 的返回值都要求必须是个字符串类型,那么这些条件触发两个方法的先后顺序以及混合使用
时,他们的优先级如何呢?
1) 可以说__repr__ 是__str__的备用; 当__str__方法存在时: print , str , %s会优先使用__str__方法,并使用其的返回值,
当__str__不存在时,则使用__repr__方法.
2) 但__str__ 可不是__repr__的备用; 当 __repr__方法存在时: repr , %r 会触发__repr__方法,并使用其返回值.如果
__repr__不存在, repr 与 %r 不会去触发__str__的运行,而是直接找object类.
3) 由此可见,在某些限制只使用一种方法时,在这两者中二选一,我们应该选择__repr__方法,因为其能被触发的条件要求
不严苛,print , str , %s , repr , %r 这五种任意一条件都可触发其运行.
4. 存在父类与子类继承关系时,这两个方法的调用顺序又如何呢?
1).父类不是object类时: print , str , %s 这三个触发的顺序依次为: 先找子类中的__str__方法,有则使用,没有则向上找父类
中的__str__方法,有则使用,没有再返回子类中找__repr__方法,有则使用,没有则继续找父类中的__repr__方法,有则使用,
没有则最终就去object类中去掉__str__方法了.
2). 父类是object类时: print , str , %s 这三个触发的顺序依次为: 优先找本类中__str__方法,没有则找__repr__方法.都没有时
最终调用object类中的__str__方法.
3) repr , %r 这两个的调用顺序就没有什么需要绕的了,它两都很专一,只找__repr__方法,找完本类找父类,找完父类找object类.