【发布时间】:2014-03-22 18:49:20
【问题描述】:
我用 abc 包实现抽象类。下面的程序显示没有问题。
有什么办法让它失败,因为抽象MyMethod 确实有一个参数a,但在类Derivative 中实现'MyMethod' 没有?所以我不仅要指定接口类Base中的方法,还要指定这些方法的参数。
import abc
#Abstract class
class Base(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def MyMethod(self, a):
'MyMethod prints a'
class Derivative(Base)
def MyMethod(self):
print 'MyMethod'
【问题讨论】:
-
不,
abc.abstractmethod不强制必须存在哪些参数。 -
Martijn,还有其他方法可以强制执行参数吗?可能与 abc 不同。
-
zope.interface可以verify method signatures。但是你需要明确地这样做(比如在单元测试中)。 -
您的项目是否复杂到需要这种静态检查?如果是,Python 可能不是您的最佳语言选择。
-
Sven,我正在实施的是一个用于网络设备黑盒测试的系统。我使用抽象类在我的软件的 HAL 层中为各种 CLI/SNMP 指定接口(除了硬件适配层之外,各种设备的测试看起来都一样)。 Python 编写测试非常方便。
标签: python class oop abstract abc