我有一个类,它定义了__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_spec
self._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'