由于我刚从C ++切换到Python,我觉得python并不关心类型安全。例如,任何人都可以向我解释为什么在Python中不需要检查函数参数的类型?
假设我按如下方式定义了一个Vector类:
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??
现在我想在两个向量之间做点积,所以我添加了另一个函数:
def dot(self,other):
# shouldn't I check the two vectors have the same dimension first??
....
答案 0 :(得分:4)
好吧,至于检查类型的必要性,这可能是一个有点开放的主题,但在python中,它被认为是良好的形式可以遵循"duck typing".该函数只使用了它需要的接口,并由调用者传递(或不传递)正确实现该接口的参数。根据函数的巧妙程度,它可以指定它如何使用参数的接口。
答案 1 :(得分:1)
在python中确实没有必要检查函数的参数类型,但也许你想要这样的效果......
这些raise Exception
在运行时发生......
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 = '\nCheck Types:'
for index in wrong_indexes:
error += ("\nThe 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.")
#.......