Nie byłem w stanie dowiedzieć się, jak to zrobić w dokumentacji PyYAML. Chcę reprezentować klasy Pythona, które zdefiniowałem w YAML, i mieć domyślną wartość nadawaną parametrowi w konstruktorze, jeśli nie jest określony w YAML. Na przykład:Domyślne parametry konstruktora w pyyaml
>>> 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'
Spodziewałem się, że będzie utworzyć obiekt testowy z barem = 3, ale myślę, że omija moje konstruktora podczas tworzenia obiektu. Gdybym to mapowanie na pasku w YAML, wszystko działa zgodnie z oczekiwaniami:
>>> yaml.load("""
... --- !Test
... foo: 5
... bar: 42
... """)
Test(foo=5, bar=42)
Czy ktoś wie jak mogę mieć go użyć wartości domyślne?