假设我定义了这样一个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是使用错误的语言,但这不是重点-有可能吗?
目前没有回答
相关问题 更多 >
编程相关推荐