Python抽象基类能否强制执行函数签名?

2024-09-29 00:22:09 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我定义了这样一个abstract base class

from abc import abstractmethod, ABCMeta

class Quacker(object):
  __metaclass__ = ABCMeta

  @abstractmethod
  def quack(self):
    return "Quack!"

这确保了从Quacker派生的任何类都必须实现quack方法。但如果我定义如下:

class PoliteDuck(Quacker):
   def quack(self, name):
     return "Quack quack %s!" % name

d = PoliteDuck()  # no error

允许我实例化类,因为我提供了quack方法,但函数签名不匹配。我可以看出这在某些情况下是多么有用,但我有兴趣确保我可以肯定地调用抽象方法。如果函数签名不同,这可能会失败!

那么:如何强制执行匹配的函数签名?如果签名不匹配,创建对象时可能会出现错误,就像我根本没有定义它一样。

我知道这不是惯用的语言,如果我想要这些保证,Python是使用错误的语言,但这不是重点-有可能吗?


Tags: 方法函数nameselfreturn定义def错误