[英]How can printing an object result in different output than both str() and repr()?
[英]YAML to use repr/str when printing an object
我有一本字典,其中鍵是對象。 這些對象可以被認為是元組包裝器,它們確實實現了__hash__
和__repr__
。
example = {
Coordinates(0,0): Rome,
Coordinates(0,1): Zurich
}
我想使用對象的 repr 用yaml
打印字典。 這將是所需的輸出:
(0, 0): Rome
(0, 1): Zurich
相反,我得到的是:
? !!python/object:__main__.Coordinates
x: 0
y: 0
: Rome
? !!python/object:__main__.Coordinates
x: 0
y: 1
: Zurich
我正在通過以下方式進行轉換:
import yaml
print(yaml.dump(example, allow_unicode=True, default_flow_style=False))
到目前為止,我找到的唯一解決方案是自己手動將所有內容強制轉換為str()
。 有沒有更優雅的解決方案?
假設類型Coordinates
存在,這將是設置:
import yaml
from yaml.resolver import BaseResolver
def coord_representer(dumper, data):
return dumper.represent_scalar(BaseResolver.DEFAULT_SCALAR_TAG,
data.__repr__())
yaml.add_representer(Coordinates, coord_representer)
DEFAULT_SCALAR_TAG
確保 PyYAML 不會為標量(x, y)
轉儲顯式標簽。 您可能希望改用實際的 YAML 序列:
def coord_representer(dumper, data):
return dumper.represent_sequence(BaseResolver.DEFAULT_SEQUENCE_TAG,
[data.x, data.y], flow_style=[True, True])
這將產生[x, y]
,一個 YAML 流序列。 問題是這很難再次讀取,因為 PyYAML 默認情況下會從中構造一個列表,該列表不能用作 dict 鍵。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.