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) 方法的主要内容,如果未能解决你的问题,请参考以下文章