python - YAML.register_class() 和 yaml_object(yml)() 之间的重复?
问题描述
在研究 ruamel.yaml ( https://yaml.readthedocs.io/en/latest/dumpcls.html ) 时,我注意到注册类可以使用YAML.register_class()
或来完成@yaml_object(yaml)
。此外,这两个函数的实现似乎几乎相同,直至内部函数名称。
我的印象是,这@yaml_object(yaml)
总是可以替换为@yaml.register_class
(即使用对象方法作为装饰器。在保持向后兼容性的同时,我认为@yaml_object(yaml)(cls)
可以重新实现为return yaml.register_class(cls)
,从而减少代码重复。
例子:
import sys
from dataclasses import dataclass
from ruamel.yaml import YAML, yaml_object
yaml = YAML()
@yaml.register_class
@dataclass
class Asdf:
foo: int
bar: int
yaml.dump(Asdf(1,2), sys.stdout)
印刷
!Asdf
foo: 1
bar: 2
有没有这样行不通的情况?或者这是包的作者错过的东西?
解决方案
是的,这是可能的,但这只是现在才register_class
真正返回cls
.
此回归cls
于 2018-07-12 引入,解决问题 #186。
如果你这样做:
import sys
from ruamel.yaml import YAML, yaml_object
yaml = YAML()
def yaml_object(yml):
return yml.register_class
@yaml_object(yaml)
class Asdf:
def __init__(self, foo, bar):
self.foo = foo
self.bar = bar
yaml.dump(Asdf(1,2), sys.stdout)
它给:
!Asdf
foo: 1
bar: 2
推荐阅读
- node.js - TestCafe:将另一个文件中的测试导入当前的夹具
- php - 使用返回 null 的 curl 解析 XML
- python - 尝试在 pycharm 上创建新变量时出现“未解决的参考”
- opengl-es - glBufferSubData 在许多 android 设备上非常慢
- anylogic - 将潮汐时间融入 AnyLogic
- mongodb - findByIdAndUpdate 返回 200 响应但不更新
- tensorflow - YOLO v3 完整架构
- android - Get exist words from text with regex
- java - why different XPathFactory implementation used?
- python - NoneType' object has no attribute 'all