gpt4 book ai didi

python - 格式化的 Python 字符串既不使用 repr 也不使用 str - 发生了什么?

转载 作者:行者123 更新时间:2023-12-05 00:44:04 28 4
gpt4 key购买 nike

我有一个枚举 ResourceType,它继承自 namedtupleEnum,并且我没有覆盖 __str____repr__ 任何地方。当我格式化该枚举的一个实例时,我意外地得到了未修饰的值,而不是 repr()str()。这怎么可能?叫什么?

枚举详细信息(简化):

from enum import Enum, auto
from collections import namedtuple

class ResourceType(namedtuple('ResourceType', 'value ext required'), Enum):
RGB = auto(), '.png', True

输出:

>>> repr(ResourceType.RGB)
"<ResourceType.RGB: ResourceType(value=<enum.auto object at 0x7f44b7d48d30>, ext='.png', required=True)>"

>>> str(ResourceType.RGB)
'ResourceType.RGB'

>>> f"{ResourceType.RGB}"
"ResourceType(value=<enum.auto object at 0x7f44b7d48d30>, ext='.png', required=True)"

最后一个值既不是 repr() 也不是 str(),所以即使 namedtuple 提供了那个字符串,为什么它也不提供 str/repr 吗?

最佳答案

当您以这种方式将对象插入 f 字符串时,它会调用 __format__方法。

from enum import Enum, auto
from collections import namedtuple

class ResourceType(namedtuple('ResourceType', 'value ext required'), Enum):
RGB = auto(), '.png', True

def __repr__(self):
return "REPR"

def __str__(self):
return "STR"

def __format__(self, format_spec):
return "FORMAT"

print(repr(ResourceType.RGB))
print(str(ResourceType.RGB))
print(f"{ResourceType.RGB}")

输出

REPR
STR
FORMAT

关于python - 格式化的 Python 字符串既不使用 repr 也不使用 str - 发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68299474/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com