PythonCookbook第八章(类与对象)持续更新
Posted 区块链散户一枚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PythonCookbook第八章(类与对象)持续更新相关的知识,希望对你有一定的参考价值。
为了对类有更加深入的理解,继续学习类相关知识。
8.1修改实例的字符串标识
class Pair: def __init__(self, x, y): self.x = x self.y = y def __repr__(self): # !r标志__repr__输出 return ‘Pair({0.x!r}), ({0.y!r})‘.format(self) def __str__(self): # !s标志__str__输出 return ‘({0.x!s}), ({0.y!s})‘.format(self)
讨论理解
__repr__()的标准做法是让它产生的字符串文本能够满足eval(repx(x)) == x。
或者产生一个一段有帮助意义的文本
>>> f = open(‘t8_1_2.py‘) >>> f <_io.TextIOWrapper name=‘t8_1_2.py‘ mode=‘r‘ encoding=‘UTF-8‘> >>>
没有定义__str__会用__repr__输出来备份
最后写一种%强制__repr__格式化输出
def __repr__(self): # !r标志__repr__输出 return ‘Pair (%r, %r)‘ % (self.x, self.y)
8.2自定义字符串的输出格式
像让对象通过foramt()函数和字符串方法支持自定义的输出格式。
_format = { ‘ymd‘:‘{d.year}-{d.month}-{d.day}‘, ‘mdy‘:‘{d.month}/{d.day}/{d.year}‘, ‘dmy‘:‘{d.day}/{d.month}/{d.year}‘, } class Date: def __init__(self, year, month, day): self.year = year self.month = month self.day = day def __format__(self, format_spec): # 默认format函数没有输入参数为空字符 if format_spec == ‘‘: format_spec = ‘ymd‘ fmt = _format[format_spec] # 通过.format的形式,通过关键字的形式,属性取值格式化输出 return fmt.format(d=self) ‘‘‘ format(instance,[arg]),第二个为传入给__format__的参数 ‘{:xxx}‘.format(d)等同与format(d, xxx),冒号后面为传入给format的参数 ‘‘‘
shijianzhongdeMacBook-Pro:chapter_8 shijianzhong$ python3 -i t8_2_2.py >>> d = Date(2012, 12, 21) >>> format(d) ‘2012-12-21‘ >>> format(d,‘dmy‘) ‘21/12/2012‘ >>>
>>> ‘The Date is {:mdy}‘.format(d)
‘The Date is 12/21/2012‘
>>> ‘The Date is {}‘.format(d)
‘The Date is 2012-12-21‘
>>> ‘The Date is {:dmy}‘.format(d)
‘The Date is 21/12/2012‘
讨论
__format__()方法在Python的字符串格式化功能中提供了一个钩子。需要强调的是,对格式化代码的解释完全取决与类本身。因此,格式化代码几乎可以为任何形式
In [76]: d =date(2020,12,12) In [77]: d Out[77]: datetime.date(2020, 12, 12) In [78]: format(d) Out[78]: ‘2020-12-12‘ In [79]: format(d,‘%A, %B %dm %Y‘) Out[79]: ‘Saturday, December 12m 2020‘ In [80]: ‘The end is {:%d -%b -%y}.‘.format(d) Out[80]: ‘The end is 12 -Dec -20.‘ In [81]:
8.3让对象支持上下问管理协议
以上是关于PythonCookbook第八章(类与对象)持续更新的主要内容,如果未能解决你的问题,请参考以下文章