Pthon魔术方法(Magic Methods)-可视化
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.关于可视化的魔术方法简介
__str__: str()函数,format()函数,print()函数调用,需要返回对象的字符串表达式,即会默认调用该魔术方法。 如果没有定义该方法,就去调用"__repr__"方法返回字符串表达式,如果"__repr__"没有定义,就直接返回对象的内存地址信息。 __repr__: 内建函数repr()对一个对象获取字符串表达。 调用"__repr__"方法返回字符串表达,如果"__repr__"也没有定义,就直接返回object的定义就是显示内存地址信息。 __bytes__: bytes()函数调用,返回一个对象的bytes表达,即返回bytes对象。
二.案例展示
1 #!/usr/bin/env python 2 #_*_conding:utf-8_*_ 3 #@author :yinzhengjie 4 #blog:http://www.cnblogs.com/yinzhengjie 5 6 class Person: 7 def __init__(self,name,age=18): 8 self.name = name 9 self.age = age 10 11 def __repr__(self): 12 return "repr:{},{}".format(self.name,self.age) 13 14 def __str__(self): 15 return "str:{},{}".format(self.name,self.age) 16 17 def __bytes__(self): 18 import json 19 return json.dumps(self.__dict__).encode() 20 21 p1 = Person("Jason Yin") 22 23 print(p1) #print函数默认调用的是str方法 24 25 print("{}".format(p1)) #字符串的format方法也是调用"__str__"方法 26 27 print([p1]) #使用引用类型存储p1时,发现调用的时"__repr__"方法 28 29 print([str(p1)]) #我们可以显示使用str函数去调用"__str__"魔术方法,如果没有"__str__"方法就去找"__repr__"方法 30 31 print(bytes(p1)) #调用的是"__bytes__"方法 32 33 """ 34 温馨提示: 35 在学习完可视化方法后,同学们应该明白之前我们看到所有的字符串输出其实都是别人封装好的魔术方法,比如:print(1,'1',['1',1]) 36 因此,咱们不能通过判断是否带引号来判断输出值的类型,类型判断需要使用type或者isinstance. 37 """ 38 39 40 41 #以上代码执行结果如下: 42 str:Jason Yin,18 43 str:Jason Yin,18 44 [repr:Jason Yin,18] 45 ['str:Jason Yin,18'] 46 b'{"name": "Jason Yin", "age": 18}'