Я не смог выяснить, как это сделать, в документации PyYAML. Я хочу представить классы Python, которые я определил в YAML, и иметь значение по умолчанию, заданное параметру в конструкторе, если оно не указано в YAML. Например:
>>> class Test(yaml.YAMLObject):
... yaml_tag = u"!Test"
... def __init__(self, foo, bar=3):
... self.foo = foo
... self.bar = bar
... def __repr__(self):
... return "%s(foo=%r, bar=%r)" % (self.__class__.__name__, self.foo, self.bar)
...
>>> yaml.load("""
... --- !Test
... foo: 5
... """)
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
File "<stdin>", line 7, in __repr__
AttributeError: 'Test' object has no attribute 'bar'
Я ожидал, что это создаст объект Test с bar=3
, но я предполагаю, что он обходит мой конструктор, когда создает объект. Если я включаю отображение для бара в YAML, все работает как положено:
>>> yaml.load("""
... --- !Test
... foo: 5
... bar: 42
... """)
Test(foo=5, bar=42)
Кто-нибудь знает, как я могу использовать значение по умолчанию?