On Tue, Sep 13, 2022 at 01:47:10PM -0400, Owen Hilyard wrote:
>    <snip>
> 
>      > +# Frozen makes the object immutable. This enables further
>      optimizations,
>      > +# and makes it thread safe should we every want to move in that
>      direction.
>      > +@dataclass(slots=True, frozen=True)
>      > +class NodeConfiguration:
>      > +    name: str
>      > +    hostname: str
>      > +    user: str
>      > +    password: Optional[str]
>      > +
>      > +    @staticmethod
>      > +    def from_dict(d: dict) -> "NodeConfiguration":
>      > +        return NodeConfiguration(
>      > +            name=d["name"],
>      > +            hostname=d["hostname"],
>      > +            user=d["user"],
>      > +            password=d.get("password"),
>      > +        )
>      > +
>      Out of curiosity, what is the reason for having a static "from_dict"
>      method
>      rather than just a regular constructor function that takes a dict as
>      parameter?
> 
>    @dataclass(...) is a class annotation that transforms the thing it
>    annotates into a dataclass. This means it creates the constructor for
>    you based on the property type annotations. If you create your own
>    constructor, you need a constructor that can either take a single
>    dictionary or all of the parameters like a normal constructor. Making
>    it a static method also means that each class can manage how it should
>    be constructed from a dictionary. Some of the other classes will
>    transform lists or perform other assertions. It also makes it easier to
>    have specialized types. For instance, a NICConfiguration class would
>    have to handle all of the possible device arguments that could be
>    passed to any PMD driver if things were passed as parameters.
> 
>      > +
>      > +@dataclass(slots=True, frozen=True)
>      > +class ExecutionConfiguration:
>      > +    system_under_test: NodeConfiguration
>      > +
>      Minor comment: seems strange having only a single member variable in
>      this
>      class, effectively duplicating the class above.
> 
>    More is intended to go here. For instance, what tests to run,
>    configuration for virtual machines, the traffic generator node.
> 
>    <snip>
>
Thanks for all the explanations. 

Reply via email to