Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中重写抽象方法时如何限制参数_Python - Fatal编程技术网

在python中重写抽象方法时如何限制参数

在python中重写抽象方法时如何限制参数,python,Python,在这里,我定义了一个带有两个参数的抽象方法f。我想限制子类,使其具有与超类相同的参数 如何做到这一点?没有任何简单的方法来检查方法签名是否匹配 但是,假设: 您的子类仅派生自相关的抽象类,或者抽象类是其mro中的第一个 抽象类的实现是空的,以消除任何不必要的结果的可能性,例如将新属性绑定到子类, 您可以调用抽象方法,从子类方法传递参数。该调用仅用于强制签名匹配 class F(object): __metaclass__ = abc.ABCMeta @abc.abstractme

在这里,我定义了一个带有两个参数的抽象方法f。我想限制子类,使其具有与超类相同的参数


如何做到这一点?

没有任何简单的方法来检查方法签名是否匹配

但是,假设:

您的子类仅派生自相关的抽象类,或者抽象类是其mro中的第一个 抽象类的实现是空的,以消除任何不必要的结果的可能性,例如将新属性绑定到子类, 您可以调用抽象方法,从子类方法传递参数。该调用仅用于强制签名匹配

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()
Python抽象方法与其他方法不同,可以有实现,并且可以通过调用;因此,也许这毕竟是一个用例。

相关:
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)