簡體   English   中英

Pyyaml:繼承類的默認轉儲行為

[英]Pyyaml: Default dump behavior for inherited classes

我有一個繼承自其中一個內置插件的 class:

from yaml import YAMLObject, dump
class D(dict, YAMLObject):
   yaml_tag = u'!!map'
   ...

有沒有辦法告訴 pyyaml 任何D實例的轉儲都應該像父母一樣對待(在這種情況下是 dict)? 即,我想要以下output:

d = {'a':1}
print( dump(d) )
>>> a: 1

代替

print( dump(D(d)) )
>>> !%21map {}

如您所見,我已經嘗試為 class 分配默認標簽,但這並沒有成功。 不幸的是,定義自定義轉儲程序不是一種選擇。

您可以在D class 中提供自定義to_yaml方法:

import yaml


class D(dict, yaml.YAMLObject):
    yaml_tag = "!map"

    @classmethod
    def to_yaml(cls, dumper, data):
        return dumper.represent_dict(dict(data))


d = D({"foo": "bar"})
print(yaml.dump(d))

上面的output是:

foo: bar

請注意,這僅適用於yaml.dump而不適用於yaml.safe_dump yaml_tag的值看似無關緊要,但必須設置; 如果不設置它,上面的 output 將是:

!!python/object/new:__main__.D
dictitems:
  foo: bar

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM