自定义输出内容 __str__() 和 __repr__() 以及__format__() 的使用

Posted zach0812

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义输出内容 __str__() 和 __repr__() 以及__format__() 的使用相关的知识,希望对你有一定的参考价值。

一: __str__() 和 __repr__() 保留方法:

 1 class DemoClass:
 2     def __init__(self,name,age):
 3         self.name = name
 4         self.age = age
 5 
 6     def __str__(self):
 7         #print()-->调它
 8         return "Name:,Age:".format(self.name,self.age)
 9 
10 
11 if __name__ == "__main__":
12     demo = DemoClass("tom",18)
13     print(demo)  #此时调用的是demo.__str__()  
14     #如果不重写__str__() 输出的就是 <__main__.DemoClass object at 0x00000238B1D6FBE0>
15 ‘‘‘
16     输出:
17     Name:tom,Age:18
18 ‘‘‘

 

__repr__()  保留方法是个备胎:

 1 class DemoClass:
 2     def __init__(self,name,age):
 3         self.name = name
 4         self.age = age
 5 
 6     def __repr__(self):
 7         #print()-->调它
 8         return "Name:,Age:".format(self.name,self.age)
 9 
10     def __str__(self):
11         return "name:,age:".format(self.name,self.age)
12 
13 if __name__ == "__main__":
14     demo = DemoClass("tom",18)
15     print(demo)
16     
17 ‘‘‘
18     输出:
19     name:tom,age:18
20     
21     结果表明,print() 的调用顺序是:
22     print()-->str()-->demo.__str__()-->demo.__repr__()
    不过,__repr__() 适合在交互环境下使用!
23 ‘‘‘

还有的是,这两个保留方法都要返回字符串类型。

二:自定制格式化方式__format__()

format() 实际上调的方法是__format__() 

 1 format_dict = 
 2     ymd: "0.year 0.mon 0.day",
 3     y:m:d: "0.year:0.mon:0.day",
 4     y-m-d: "0.year-0.mon-0.day",
 5     #0 代表的是类的实例对象self
 6 
 7 class DemoClass:
 8     def __init__(self, year, mon, day):
 9         self.year = year
10         self.mon = mon
11         self.day = day
12 
13     def __format__(self, key):
14         return format_dict[key].format(self)
15 
16 
17 if __name__ == "__main__":
18     demo = DemoClass(2019, 8, 6)
19     print(format(demo, ymd))
20     print(format(demo, y:m:d))
21     print(format(demo, y-m-d))
22 ‘‘‘
23     输出      
24     2019 8 6
25     2019:8:6
26     2019-8-6
27 ‘‘‘

 

以上是关于自定义输出内容 __str__() 和 __repr__() 以及__format__() 的使用的主要内容,如果未能解决你的问题,请参考以下文章

自定义异常中的 __str__ 包装器

Python入门基础__面向对象编程_2

对模型使用自定义方法而不是 __unicode__/__str__?

__str__和__repr__的区别

对象名称重载__str__ 和__repr__

Python中的__str__()方法和__repr__()方法