自定义str_repr_format

class Foo:
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def __str__(self):           #自定义类的实例对象打印显示方式
        return "这个是str:名字是%s,年龄是%s" %(self.name,self.age)   #注意return的是字符串

    def __repr__(self):           #在解释器中自定义对象的显示方式
        return "这个是repr:名字是%s,年龄是%s" %(self.name,self.age)

f1 = Foo("sjy",25)
print(f1)        #打印这个对象,触发的是str(),f1.__str__(),对象默认显示的是对象的内存地址

#如果print找不到自定义的__str__,则会使用__repr__

format_dic = {
    "ymd":"{0.year}{0.mon}{0.day}",
    "y-m-d":"{0.year}-{0.mon}-{0.day}",
    "y:m:d":"{0.year}:{0.mon}:{0.day}"
}
class Date:
    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 format_spec not in format_dic:     #判断是否给参数,或者是否不符合字典内定义的形式
            format_spec = "ymd"
        fm = format_dic[format_spec]           #按照key取字典中的值
        return fm.format(self)                 #必须要一个return值
    
d1 = Date(2019,5,14)
print(format(d1))

 

posted @ 2019-05-14 00:36  saber゛  Views(190)  Comments(0Edit  收藏  举报