# __str__ __repr__ 与 __format__class Foo: def __init__(self, year, month, day): self.year = year self.month = month self.day = day def __str__(self): return '改变了对象的字符串方式,默认为对象的内存地址' def __repr__(self): return '在控制台输出时(或没有__str__)的显示方式' # __str__ 与 __repr__ 只能return字符串类型 def __format__(self, format_spec): if not format_spec or format_spec not in format_dic: # 此处判断用户是否传空参数或字典中没有的参数,并指定一个值 format_spec = 'm-d-y' fm = format_dic[format_spec] # 从字典format_dic中找到相应的格式 return fm.format(self) # 返回显示的格式f1 = Foo(2018, 5, 8)print(f1) # 相当于 str(f1) -> f1.__str__ 这样执行# 对于__str__ 和 __repr__ 都存在的话,print会先找__str__,如果没有__str__就执行__repr# 定义format显示方式的字典format_dic = { 'y-m-d': '{0.year}-{0.month}-{0.day}', 'm-d-y': '{0.month}-{0.day}-{0.year}'}print(format(f1)) # 当使用format方法时会调用__format__方法,并按我们定义的显示方式显示