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第八章(类与对象)持续更新的主要内容,如果未能解决你的问题,请参考以下文章

第八章 类对象的特性

HIVE 第八章 UDF

使用java实现面向对象 第八章

JAVA-初步认识-第八章-继承-子父类中成员变量的特点

第八章 面向对象方法学

Redis 设计与实现(第八章) -- 对象