zoukankan      html  css  js  c++  java
  • python3--__repr_和__str__会返回字符串表达形式

    __repr_和__str__会返回字符串表达形式

    下一个例子是已经见过的init构造方法和add重载方法,本例也会定义返回实例的字符串表达形式的__repr__方法。字符串格式把self.data对象转换为字符串。如果定义了的话,当类的实例打印或转换成字符申时,__repr__(或其近亲__str__)就会自动调用。这些方法可替对象定义更好的显示格式,而不是使用默认的实例显示。

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    class adder:
        def __init__(self, value = 0):
            self.data = value
        def __add__(self, other):
            self.data += other
    
    class addrepr(adder):
        def __repr__(self):
            return 'addrepr(%s)' % self.data
    
    x = addrepr(2)
    x + 1
    print(x)
    
    print(str(x), repr(x))
    

    运行结果:

    addrepr(3)
    addrepr(3) addrepr(3)
    

    那么,为什么要两个显示方法?概括地讲,是为了进行用户有好的显示,就像print语句和str内置函数一样,会先尝试__str__。__repr__方法从原则上应该放回一个字符串,这个字符串可以作为可执行代码去重建该对象,这是用于交互模式下提示回应以及repr函数。如果__str__不存在,Python会转向__repr__(反过来就不会)。

    class addstr(adder):
        def __str__(self):
            return '[Value: %s]' % self.data
    
    x = addstr(3)
    x + 1
    print(x)
    print(str(x), repr(x))
    

    运行结果:

    [Value: 4]
    [Value: 4] <__main__.addstr object at 0x000000000280A2E8>
    

    正是由干这一点,如果想让所有环境都有统一的显示,__repr__是最佳选择。不过,分别定义这两个方法的话,就可在不同环境内支持不同显示。例如,终端用户显示使用__str__,而程序员在开发期间则使用底层的__repr__来显示。

    class addboth(adder):
        def __str__(self):
            return '[Value: %s]' % self.data
        def __repr__(self):
            return 'addboth(%s)' % self.data
    
    x = addboth(4)
    x + 1
    print(x)
    print(str(x), repr(x))
    

    运行结果:

    [Value: 5]
    [Value: 5] addboth(5)

    在实际应用中,除了__init__以外,__str__(或其底层的近亲__repr__)似乎是Python脚本中第二个最常用的运算符重载方法。在任何时候,都可以打印对象而看见定制过的显示的时候,可能就是使用了这两个工具中的一个。

  • 相关阅读:
    lambda Join /Group by/ Contains
    PDF ITextSharp
    sql server基本流程语句
    easyui DateTimeBox OK
    Axuer 网页
    蓝桥杯- 煤球数目-java
    蓝桥杯-有奖猜谜-java
    蓝桥杯-打印大X-java
    蓝桥杯- 移动距离-java
    蓝桥杯-加法变乘法-java
  • 原文地址:https://www.cnblogs.com/chenlin163/p/7306292.html
Copyright © 2011-2022 走看看