クラス変数をメソッドにデフォルト引数として渡す

class A:
    NAME = "A"

    def echo(self, text: str = NAME) -> None:
        print(text)


class B(A):
    NAME = "B"


B().echo()

この B().echo() は「B」ではなく、「A」を出力します。

class B(A):
    NAME = "B"

    def echo(self, text: str = NAME) -> None:
        print(text)

このように、Bでechoをオーバーライドしたら、出力は「B」になります。デフォルト引数の評価タイミングは少し難しいですね。

コメント

2015 - 2017 (c) 成瀬基樹