Skip to content

**kwargs unexpectedly parses flags for later chained method #659

@louis-shao

Description

@louis-shao

Suppose we have the following program

from dataclasses import dataclass

@dataclass
class MyClass:
    x: int

    def transform(self, **kwargs):
        return MyClass(self.x * kwargs.get("multiplier", 2))

    def do_something(self, msg):
        print(f"{msg}: {self.x}")

my_obj = MyClass(3)

And we call it with python -m fire my_module my_obj transform --multiplier=3 do_something --msg="test", then the --msg is parsed when calling transform into the kwargs dict. Then it errors saying --msg is missing. Can we instead support parsing flags before the next chained method call? The kwargs is useful for example, to transform the object in ways that only implementation classes know what to do.

My current workarounds are (1) pass msg as positional arg to do_something, (2) have do_something take **kwargs and call transform within it. Neither is ideal as (1) would surprise anyone who uses my code and (2) adds extra plumbing that could be avoided.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions