)まず、この質問はduplicateであるかもしれませんが、どういうわけかそれらの答えの周りに私の頭を持っていません。私が持っていると言う:子どもの方法を親の方法で飾る方法(
import argparse
class Parent:
def __init__(self):
self.parser = argparse.ArgumentParser()
self.parser.add_argument("user")
# parse the argument
self.parser.parse_args()
class Child(Parent):
def __init__(self):
# here self.parser is not defined
# self.parser.add_argument("password")
super().__init__()
# here args are already parsed and
# self.parser does not include args
# self.parser.add_argument("password")
if __name__ == '__main__':
Child()
これは私が(コマンドラインアプリケーションフレームワークのようなものを書きたいコードの最小限の実施例である私のセットアップは、基本的には次
class Parent:
def __init__(self):
# do some stuff starting stuff
# middle
# do some ending stuff
class Child(Parent):
def __init__(self):
# do something in the middle of Parent init
簡単な部分的な回避策があります。私の場合、Parent
がself.parser.parse_args()
をしていないか、なんとか(今は正確に書く方法が分からない)をチェックして、子が引数を追加して子クラスにself.parser.parse_args()
を残していれば、可能な1つの愚かなアイデアは、PAを変更することでした家賃の__init__
は(INITが、それはおそらく、様々な他の理由から動作しません... None
以外のものを返すことができないという事実から一部?)子供を超えるデコレータのように振る舞うと、このような何かを
class Child(Parent):
@super.__init__
def __init__(self):
どのようなアイデアですか、どのパスを選ぶ必要がありますか?そのための私の動機は、そのようなフレームワーク(つまり、Parentを継承するアプリケーションを書くことを意味する)をエンドユーザが望むことです。できるだけ少ない作業を行う必要があります。 。どのようにこれを行うには合理的な方法はありますか?
すべての機能が '__init__'に含まれている場合、なぜこのためにクラスを使用していますか?最後の行は、たとえば、次のようになります。 'Child()。parse()'? – jonrsharpe
@jonrsharpeこれは単なる私の考えではありません。 – quapka