wal*_*mat 4 python yaml python-3.x
我尝试按照此处的说明进行操作,这使我找到了以下代码:
import yaml
class Step(yaml.YAMLObject):
yaml_tag = "!step"
def __init__(self, *args, **kwargs):
raise Exception("Intentionally.")
yaml.load("""
--- !step
foo: bar
ham: 42
""")
Run Code Online (Sandbox Code Playgroud)
预期行为:我得到一个例外。但我观察到的是,我的 YAML 标记生成了一个Step实例,我可以使用它、访问方法、属性(如foo上面的代码)等等。阅读文档,我找不到我的错误,因为它表明使用所有键值对作为关键字参数调用构造函数。
基本上文档中的示例有效,但不是因为构造函数的实现,而是因为键值对( 的属性Monster)用于填充对象的字典。
这里有人知道吗?
我正在使用 python3,但在 python2 中进行了快速评估并观察到相同的情况。
编辑
我想做的事:为了保持在链接的例子(文档),如果Monster小号name带开始B,双倍的价值ac。
从文档:
yaml.YAMLObject 使用元类魔法来注册一个构造函数,它将一个 YAML 节点转换为一个类实例,以及一个表示器,它将一个类实例序列化为一个 YAML 节点。
在内部,默认 constructor 注册者yaml.YAMLObject将调用YourClass.__new__然后使用instance.__dict__. 有关更多详细信息,请参阅此方法。
根据您想要做什么,您可以放入一些逻辑Step.__new__(但您不会在 中获取任何字段**kwargs,或者注册一个自定义构造函数。
| 归档时间: |
|
| 查看次数: |
1361 次 |
| 最近记录: |