【发布时间】:2014-11-20 17:07:36
【问题描述】:
我有几节课:
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 警告。
我尝试了什么:
- 将
**kwargs添加到Sup.meth- 没有任何改变 - 用
# pylint: disable=arguments-differ注释Sub*.meth- 有效,但丑陋。
PS。 Sup 是一个收集统计数据的抽象类; Sub* 是不同的方法; meth 用不同的花里胡哨打印对象。
【问题讨论】:
-
您是否从任何子类调用
Sup.meth? Python 不会为被覆盖的方法强制使用相同的签名,所以我并不完全清楚问题是什么。 -
我从不打电话给
Sup.meth;我只想安抚pylint。 -
一个选择是
# pylint: disable=arguments-differ!您可以将**kwargs用于“任意关键字参数”,pylint是否会接受我现在无法检查。 -
adding **kwargs to Sup.meth - did not work更明确一点? -
鉴于他们似乎采取了不相关的论点,他们真的应该是同一种方法吗?在超类和子类上拥有一个方法的重点是调用它的代码不必关心它有什么特定的实例。如果有不同的论点,这是不正确的。你能提供一个不那么抽象的例子吗?
标签: python class inheritance