在Python中,format 方法是一个特殊方法,它允许对象定义自己的格式化行为。这个方法在使用字符串格式化操作符 %、str.format() 方法,或者在格式化字符串字面值(也称为f-strings)中被调用。它允许对象自定义如何响应不同的格式化指令。
format 方法接受两个参数:
- format_spec:一个描述如何格式化对象的字符串。这通常包括一个类型代码(比如 ‘s’ 表示字符串,‘d’ 表示整数等)和可能还包括其他选项,如宽度、精度和标志。
- convert:在旧式的 % 格式化中使用的,但在 str.format() 和 f-strings 中不被使用,通常可以忽略。
下面是一个简单的例子,展示了如何在自定义类中实现 format 方法:
class MyNumber:
def __init__(self, value):
self.value = value
def __format__(self, format_spec):
if format_spec == 'hex':
return hex(self.value)
elif format_spec == 'bin':
return bin(self.value)
else:
return str(self.value)
# 创建一个MyNumber对象
num = MyNumber(255)
# 使用不同的格式化指令
print('{:d}'.format(num)) # 输出: 255
print('{:hex}'.format(num)) # 输出: 0xff
print('{:bin}'.format(num)) # 输出: 0b11111111
# 使用f-string
print(f"{num:d}") # 输出: 255
print(f"{num:hex}") # 输出: 0xff
print(f"{num:bin}") # 输出: 0b11111111
在这个例子中,MyNumber 类有一个 format 方法,它根据 format_spec 参数的值来决定如何格式化对象。如果 format_spec 是 ‘hex’,则对象被格式化为十六进制字符串;如果是 ‘bin’,则对象被格式化为二进制字符串;否则,对象被转换为普通的十进制字符串。
format 方法允许你定制对象如何响应不同的格式化请求,这对于创建自定义的数据类型并控制它们在字符串格式化中的行为非常有用。