将函数的所有参数传递给另一个函数

新手上路,请多包涵

我想要一个可以创建其子类的类,该类具有仅在特定条件下打印的打印功能。

这基本上是我正在尝试做的事情:

 class ClassWithPrintFunctionAndReallyBadName:
    ...
    def print(self, *args):
        if self.condition:
            print(*args)

这已经有效,除了必须使用默认 print 函数明确声明的参数,例如 end (示例: print('Hello, world!', end='') )。我怎样才能让我的新班级的 print 函数接受诸如 end='' 之类的参数并将它们传递给默认值 print

原文由 Neithan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 517
2 个回答

传递所有参数的标准方法是@JohnColeman 在评论中建议的那样:

 class ClassWithPrintFunctionAndReallyBadName:
    ...
    def print(self, *args, **kwargs):
        if self.condition:
            print(*args, **kwargs)

作为参数, *args 接收非关键字(位置)参数的元组,而 **kwargs 是关键字参数的字典。

当使用 *** 调用一个函数时,前者的元组被展开,就好像参数是单独传递的,而后者的字典被展开,就好像它们是关键字参数一样。

原文由 Mark Tolonen 发布,翻译遵循 CC BY-SA 4.0 许可协议

我知道它看起来有点难看但效果很好,如果你使用了很多关键字参数并且只想为另一种方法构建一个外观:

 def print(self, print_message, end='\n', sep=' ', flush=False, file=None):
    if self.condition:
        print(**{key: value for key, value in locals().items() if key != 'self'})

虽然它有很多样板,但它避免了参数语句的任何重复。

您也可以考虑使用装饰器使条件部分更像 pythonic。但请注意,装饰器会在类实例化之前检查一次条件。

原文由 CheradenineZK 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题