假设我定义了一个这样的抽象基类:
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 是错误的语言,但这不是重点——有可能吗?