class F(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def f(self, a, b): print("F")
class FF(F):
def f(self): print("FF")
f = FF()
f.f()
在这里,我使用两个参数定义了一个抽象方法f
。我想限制子类,以便它具有相同的参数,如超类。
怎么做?
答案 0 :(得分:1)
没有任何简单的方法可以检查方法签名是否匹配。
但是,假设:
您可以对从子类方法传递参数的抽象方法进行super
调用。 调用仅用于强制执行签名匹配。
class F(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def f(self, a, b): pass
class FF(F):
def f(self, *args, **kwargs):
super(FF, self).f(*args, **kwargs)
...
f = FF()
f.f()
Traceback (most recent call last):
File "python", line 17, in <module>
File "python", line 12, in f
TypeError: f() takes exactly 3 arguments (1 given)
Python抽象方法(与其他方法不同)可以有实现,可以通过super
调用;所以这可能就是一个用例。
答案 1 :(得分:0)
您可以使用 abcmeta
库:https://github.com/mortymacs/abcmeta
.它为您提供了对派生类的更多限制。