argparseモジュールが大好きです。値を指定した場合でもデフォルトの出力ファイルが作成されるため、デフォルトargparse.FileTypeを他のものにしたい場合を除き、これも役立ちます。sys.std*
例えば:
parser.add_argument('--outfile', type=FileType('w'), default="out.txt")
--outfile でファイルを指定しても、out.txt が作成されます。
私が思いつくことができる最高のものは次のとおりです。
class MagicFileType(object):
    def __init__(self, *args, **kwargs):
        # save args/kwargs and set filetype to None
        self.filetype = None
        self.args = args
        self.kwargs = kwargs
    def __getattr__(self, attr):
        """ Delegate everything to the filetype """
        # If we haven't created it, now is the time to do so
        if self.filetype is None:
            self.filetype = FileType(*self.args, **self.kwargs)
            self.filetype = self.filetype(self.filename)
        return getattr(self.filetype, attr)
    def __call__(self, filename):
        """ Just cache the filename """
        # This is called when the default is created
        # Just cache the filename for now.
        self.filename = filename
        return self
しかし、これがもっと簡単なはずだと感じたら、何か足りないのでしょうか?