gpt4 book ai didi

python - 如何在父类(super class)中定义一个方法,使其与任何子类兼容?

转载 作者:太空狗 更新时间:2023-10-30 01:22:01 26 4
gpt4 key购买 nike

我有几个类:

class Sup:
def meth (self, ?????):
pass

class Sub1(Sup):
def meth (self, foo = 1):
...

class Sub2(Sup):
def meth (self, bar = 2, baz = 3):
...

我要用什么替换 Sup.meth 中的 ??????

基本上,我想要类似于 Lisp 中忽略的 &rest lambda-list 关键字的东西来平息 arguments-differ/Arguments number differs from overridden method 警告。

我尝试过的:

  1. **kwargs 添加到 Sup.meth - 没有改变任何东西
  2. 使用 # pylint: disable=arguments-differ 注释 Sub*.meth - 有效,但丑陋。

附言。 Sup 是一个收集统计信息的抽象类; Sub* 是执行此操作的不同方法; meth 用不同的花里胡哨打印对象。

最佳答案

我发现 pylint 对许多 Python 特性有...不同寻常的看法。它认为 some_function(*list_of_args) 是“坏魔法”,例如 (W0124)。

当你和 pylint 永远不会就“问题”达成一致时,解决方案不是在你的代码中添加奇怪的注释,而是在 ~/.pylintrc 中永远沉默该消息>。 (pylint --generate-rcfile 将吐出一个示例配置文件,您可以自己编辑它。)在那里,您可以设置:

  • 故意未使用变量的正则表达式:dummy-variables-rgx=_$|__$

  • 变量、类和常量名称的正则表达式:function-rgx=[a-z_][a-z0-9_]{0,30}$

  • 静音单个警告或整个消息类别(“IRCWEF”之一):disable=I0011,W0142,R

~/.pylintrc 是我发现您可以禁用某些东西的唯一方法 --- 比如“I0011: “Locally disabling %s” ,因为本地沉默 I0011 本身会生成另一个 I0011 消息(这是彻头彻尾的虐待狂)。

对于项目,我通常创建一个单行 shell 脚本来进一步禁用我不打算修复的东西:

#!/bin/bash

pylint --output=colorized --disable=C0103 *.py | less -R -
# :C0103 (invalid-name): *Invalid name "%s" for type %s (should match %s)*

翻译:“我已经知道前人有他自己的命名规则,所以请不要再告诉我 8000 次。”

关于python - 如何在父类(super class)中定义一个方法,使其与任何子类兼容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27045439/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com