我有一个定义__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'
关于python - 正确使用__format__,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59271185/