当在子类中重写该方法时,是否有一种方便的方法来强制执行方法的输入和输出不变量?
通过强制执行不变量,我的意思是检查:
(相关问题询问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")
这是灵活而明确的,但我想知道是否有一些更明智的方法来做到这一点?