正确使用__format__



我有一个类,它定义了__str__以返回十六进制的整数值,以及一个__format__来返回使用用户的格式规范格式化的值:

class MyClass:
def __init__(self, value: int):
self._value = value
def __str__(self):
return '{:04X}'.format(self._value)
def __format__(self, format_spec):
return format_spec.format(self._value)

所以我期望:

'{:04X}'.format(MyClass(10)) == '000A'

str(MyClass(10)) == '000A'

但是str.format调用只返回格式规范,04X.我做错了什么?

只有规范(冒号后面的大括号中的部分(传递给__format__方法,在您的情况下,这是'04X'。它不包含占位符,因此调用format它只会再次返回'04X'

如果你想"传递"format_specself._value那么你需要明确地做到这一点,例如使用内置的format函数:

class MyClass:
def __init__(self, value: int):
self._value = value
def __str__(self):
return '{:04X}'.format(self._value)
def __format__(self, format_spec):
return format(self._value, format_spec)
>>> '{:04X}'.format(MyClass(10))
'000A'

相关内容

最新更新