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

  • 相关阅读:
    win7下 iis配置 不能添加默认文档的 解决方案
    经典SQL语句大全
    Sql 行转列问题总结
    jQuery获取Select选择的Text和 Value(转)
    如何让虚拟目录里面的webconfig不继承网站的设置
    SQL2008 用户'sa'登录失败(错误18456)图文解决方法
    ASP.NET实现公历转农历的简单方法
    你的DNN站点慢了么?
    SQLServer2005删除log文件和清空日志的方案
    由于未能创建 Microsoft Visual C# 2008 编译器,因此未能打开项目 "xxx"
  • 原文地址:https://www.cnblogs.com/quzq/p/9404178.html
Copyright © 2011-2022 走看看