zoukankan      html  css  js  c++  java
  • __str__与__repr__的触发顺序总结

    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类.

  • 相关阅读:
    Leetcode463. Island Perimeter
    C++ 编写的解码器小程序 map
    LeetCode706. Design HashMap
    LeetCode705. Design HashSet
    LeetCode804. Unique Morse Code Words
    c++后台开发 准备材料
    Scott Young-《如何高效学习》
    跳表和散列
    时间复杂度 log n
    第35题:LeetCode138. Copy List with Random Pointer
  • 原文地址:https://www.cnblogs.com/quzq/p/9404178.html
Copyright © 2011-2022 走看看