正确使用 __format__
Posted
技术标签:
【中文标题】正确使用 __format__【英文标题】:Proper use of __format__ 【发布时间】:2020-04-03 20:57:31 【问题描述】:我有一个类定义 __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
。我做错了什么?
【问题讨论】:
【参考方案1】:只有规范(大括号中的部分冒号)被传递给__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'
【讨论】:
以上是关于正确使用 __format__的主要内容,如果未能解决你的问题,请参考以下文章
如何正确使用带有 YUV_420_888 和 MediaCodec 的 ImageReader 将视频编码为 h264 格式?