他のサブ関数を呼び出す関数を作成するとき、呼び出し元がそれらのサブ関数の任意のキーワード引数を渡せるようにしたいことがよくあります。ただし、これを実装する現在の方法は厄介であり、より明確で、簡潔で、保守しやすい方法を探しています。
以下は、私が現在これを実装する方法の例です。
def foo(a, print_line="Hello World!"):
print a, print_line
def bar(a, number=2, multiple=4):
print a, number * multiple
def baz(a, **kwargs):
if "print_line" in kwargs:
foo(a, print_line=kwargs["print_line"])
else:
foo(a)
bar_kwargs = dict()
if "number" in kwargs:
bar_kwargs["number"] = kwargs["number"]
if "multiple" in kwargs:
bar_kwargs["multiple"] = kwargs["multiple"]
bar(a, **bar_kwargs)
この方法はエラーが発生しやすく、表現したいすべてのkwargを実装する必要があります。私は時々逃げることができfoo(a, print_line=kwargs.get("print_line", False)
ますが、kwargのデフォルトの引数を保持したいと思います。
シンプル。kwargs自体をサブ関数に渡し、kwargs変数をサブ関数に追加するだけです。
def foo(a, print_line="Hello World!", **kwargs):
print a, print_line
def bar(a, number=2, multiple=4, **kwargs):
print a, number * multiple
def baz(a, **kwargs):
foo(a, **kwargs)
bar(a, **kwargs)
これが機能するのは、サブ関数が必要な引数を具体的に定義しながら、任意の数のキーワード引数を受け取ることができるようになったためです。したがって、次のよう{'print_line':'test_line', 'number':1,'multiple':2}
に見えるkwarg dictは、両方の機能に対して完全に機能します。
コメントで要求されたとおり:
class SomeoneElsesClass:
def someone_elses_function(self, a, foo="bar"):
print(foo)
class MyClass(SomeoneElsesClass):
def someone_elses_function(self, a, foo="bar2", **kwargs):
super(MyClass, self).someone_elses_function(a, foo)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加