python: check function parameter types
因为我刚从C++切换到Python,所以我觉得Python不太关心类型安全。例如,有人能向我解释为什么在Python中不需要检查函数参数的类型吗?
假设我定义了一个向量类,如下所示:
1 2 3 4 | class Vector: def __init__(self, *args): # args contains the components of a vector # shouldn't I check if all the elements contained in args are all numbers?? |
现在我想在两个向量之间做点积,所以我添加了另一个函数:
1 2 3 | def dot(self,other): # shouldn't I check the two vectors have the same dimension first?? .... |
好吧,至于检查类型的必要性,这可能是一个有点开放的主题,但是在Python中,遵循"duck-typing"是一种很好的形式。函数只使用它所需要的接口,调用方必须传递(或不传递)正确实现该接口的参数。取决于函数有多聪明,它可以指定它如何使用参数的接口。
在python中,确实不需要检查函数参数的类型,但是您可能希望得到这样的效果…
这些
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | class Vector: def __init__(self, *args): #if all the elements contained in args are all numbers wrong_indexes = [] for i, component in enumerate(args): if not isinstance(component, int): wrong_indexes += [i] if wrong_indexes: error = ' Check Types:' for index in wrong_indexes: error += (" The component %d not is int type." % (index+1)) raise Exception(error) self.components = args #...... def dot(self, other): #the two vectors have the same dimension?? if len(other.components) != len(self.components): raise Exception("The vectors dont have the same dimension.") #....... |