You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中用下划线忽略重写方法参数是否为公认写法?

处理重写方法中未使用参数的类型检查警告

公认的常用写法

针对重写父类方法但无需使用参数的场景,有几种被广泛接受的解决方式:

1. 单下划线_接收单个未使用参数

如果父类方法仅包含单个位置参数,最直观的写法是用_作为参数名:

class WithoutWarning(Parent):
    def foo(self, _):
        print("Hello world")

_是Python社区约定俗成的“无需使用的变量”标识符,Pyright/Pylance等类型检查工具会识别这个约定,不会触发未访问参数的警告。

2. *_ + **_接收任意未使用参数

你用到的*_, **_写法是合法且被认可的,它的核心优势是兼容父类方法参数的任意变更——不管父类后续新增位置参数、关键字参数,子类的这个写法都能保持参数列表匹配,不会出现报错。

Python标准库中确实存在这类写法的实例:

  • 在collections.abc模块的抽象类实现里,部分子类重写抽象方法时会用*_忽略所有位置参数,比如自定义容器类重写__contains__但不需要用到参数时:
    from collections.abc import Container
    
    class DummyContainer(Container):
        def __contains__(self, *_):
            return False
    
  • 在unittest.mock模块的mock类实现中,也有用**_忽略关键字参数的场景,用于适配原方法的任意参数签名。

3. 注释标记未使用参数

如果不想修改参数名,也可以通过工具特定注释屏蔽警告:

class WithoutWarning(Parent):
    def foo(self, bar):  # type: ignore[unused-argument]
        print("Hello world")

不过这种写法依赖具体工具的语法,通用性不如前两种。

关于*_, *__的写法

你提到的*_, *__是Python 3.10+支持的语法,用于接收多组未使用的位置参数,但这种写法过于冗余——除非有特殊的参数分组需求,否则完全没必要。通常*_足够接收所有未使用位置参数,**_接收所有未使用关键字参数。

总结推荐

  • 若父类方法参数固定且数量少:优先用单个_对应每个未使用参数,代码更直观。
  • 若需要兼容父类参数的未来变更:用*_, **_,一次处理所有位置和关键字参数。
  • 避免冗余的*_, *__写法,无特殊需求时无需使用。

内容的提问来源于stack exchange,提问作者LondonRob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 02:06:25