在Python中,如何在子类中强制实现方法的输入和输出不变量?

时间:2014-12-09 16:58:21

标签: python typeerror typechecking method-signature invariants

当在子类中重写该方法时,是否有一种方便的方法来强制执行方法的输入和输出不变量?

通过强制执行不变量,我的意思是检查:

  • 输入参数的数量
  • 部分/全部输入的类型
  • 输出参数的数量
  • 部分/全部输出的类型

(相关问题询问enforcing the # of input arguments,但不是类型。其他人断言explicit type checking is unpythonic,但是,在这种情况下,我并不关心。)

例如,我有一个基类B,带有一个子类的方法,它接受一个int并返回一个浮点数。

class B(object):
    def returns_float(self, int_arg):
        raise NotImplementedException("implement me")

为了强制执行此int->浮点签名,我目前将方法拆分为returns_float()及其实现_returns_float()。子类重写后者。

class B(object):
    def returns_float(self, int_arg):
        if not numpy.issubdtype(int_arg, 'int'):
            raise TypeError("Arg isn't an int.")

        result = self._returns_float(int_arg)

        if not numpy.issubdtype(result, 'float64'):
            raise TypeError("Return type isn't a float64")

        return result

    def _returns_float(self, int_arg):
        raise NotImplementedException("implement me")

这是灵活而明确的,但我想知道是否有一些更明智的方法来做到这一点?

0 个答案:

没有答案