首页 > 其他 > 详细

四. __format__

时间:2020-12-30 13:35:43      阅读:47      评论:0      收藏:0      [点我收藏+]

四. __format__

自定义格式化字符串

1.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

2.__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 (不存在, 选择默认)

四. __format__

原文:https://www.cnblogs.com/songhaixing/p/14210825.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!