自定义格式化字符串
format( )
函数前面 字符串类型的内置方法 已经详细的介绍了 format( )
函数的玩法, 下面简单回顾一下
??直接传变量名
res="my name is {name} my age is {age}".format(age=18,name="shawn")
print(res) #my name is shawn my age is 18
??不放任何值, 让其按位置自动传值
res="my name is {} my age is {}".format(18,"shawn")
print(res) #my name is 18 my age is shawn
??通过索引传值
res="my name is {0}{0}{0} my age is {1}{0}".format(18,"shawn")
print(res) #my name is 181818 my age is shawn18
__format__
方法format( )
函数的时候触发的就是 __format__
方法class For:
def __format__(self, format_spec):
print(type(format_spec)) # 看看这个参数是什么类型
print(f"使用format()函数,触发了我-->({format_spec})")
return "aaa" # 必须返回一个字符串(不然报错),可以是任意的字符串(后面可以使用此特性来操作自定义)
F = For()
??当第二个参数不传入时默认为空
format(F)
‘‘‘输出
<class ‘str‘>
使用format()函数,触发了我-->()
‘‘‘
??传参类型 "str"
format(F,"你好")
‘‘‘输出
<class ‘str‘>
使用format()函数,触发了我-->(你好)
3.小示例 : 制作一个输出日期类, 实例的时候传入年,月,日, 可以自定义格式
class Date:
__format_dic = {
"1": "{obj.year}-{obj.mon}-{obj.day}",
"2": "{obj.year}:{obj.mon}:{obj.day}",
"3": "{obj.year}/{obj.mon}/{obj.day}"
}
def __init__(self,Year,Mon,Day):
self.year = Year
self.mon = Mon
self.day = Day
def __format__(self, format_spec):
if not format_spec or not format_spec in self.__format_dic: # 如果格式编号为空或者不在自定义字典里面
f = self.__format_dic["1"] # 那我们就给一个默认的格式
else:
f = self.__format_dic[format_spec] # 否则就使用你传入的格式
return f.format(obj=self) # 使用 "obj=self" 赋值的方法避免递归调用
mm = Date(2020,12,28)
print(format(mm,"1")) # 2020-12-28
print(format(mm,"2")) # 2020:12:28
print(format(mm,"3")) # 2020/12/28
print(format(mm,)) # 2020-12-28 (空, 选择默认)
print(format(mm,"3iop")) # 2020-12-28 (不存在, 选择默认)
原文:https://www.cnblogs.com/songhaixing/p/14210825.html