Python魔法方法:__format __(self, format_spec) 方法

Posted youzhouliu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python魔法方法:__format __(self, format_spec) 方法相关的知识,希望对你有一定的参考价值。

Python 的对象天生拥有一些神奇的方法,它们总被双下划线所包围,它们是面向对象的 Python 的一切。它们是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了某一个魔法方法,那么这个方法就会在特殊的情况下自动被 Python 所调用。

功能

定义对象被format()函数调用时的行为,常用于字符串的格式化输出。

参数

self代表一个对象;format_spec表示格式控制符(可自定义),它将接收’:‘后面的字符串(如’0: string’.format(object) ,会将字符串’string’传给format_spec)

返回值

必须是一个字符串,否则抛出异常。

示例

date_dic = 
    'ymd': '0.year:0.month:0.day',
    'dmy': '0.day/0.month/0.year',
    'mdy': '0.month-0.day-0.year',



class MyText:
    def __init__(self, year, month, day):
        self.year = year
        self.month = month
        self.day = day

    def __format__(self, format_spec):
        if not format_spec or format_spec not in date_dic:
            format_spec = 'ymd'
        fmt = date_dic[format_spec]
        return fmt.format(self)


d1 = MyText(2019, 9, 17)
# 2019: 9:17
print('0:ymd'.format(d1))

执行结果:

2019:9:17

可以在类当中重载__format__函数,这样就可以在外部直接通过format函数来调用对象,输出想要的结果。

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __str__(self):
        return 'x: %s, y: %s' % (self.x, self.y)

    def __format__(self, code):
        return 'x: x, y: y'.format(x=self.x, y=self.y)


p = Point(3, 5)
print(f'this point is p')

执行结果:

this point is x: 3, y: 5

通过重载__format__方法,把原本固定的格式化的逻辑做成了可配置的。这样大大增加了使用过程当中的灵活性,这种灵活性在一些问题场景当中可以大大简化和简洁代码。

以上是关于Python魔法方法:__format __(self, format_spec) 方法的主要内容,如果未能解决你的问题,请参考以下文章

Python3 魔法方法:定制序列

魔法方法特性和迭代器

[python] 格式化方法 format

python041--构造方法:构造和析造

Python 魔法方法~~

Python 魔法方法