Python不鼓励检查类型.但在许多情况下,这可能有用:
检查构造函数参数.例如,检查foe布尔值,字符串,字典等.如果我不这样做并将对象的成员设置为参数,则稍后会引起问题.
检查函数参数.
在属性中.如果有人设置了错误的值或不同的类型,我应该快速回复.
Andrew Dalke.. 11
答案几乎总是"不".Python,Ruby和其他一些语言的一般想法叫做" Duck Typing ".你不应该关心什么是什么,只关心它是如何运作的.换句话说,"如果你想要的只是嘎嘎叫,你不需要检查它实际上是一只鸭子."
在现实生活中,放入所有类型检查的问题是无法用替代实现替换输入.您可以检查dict,但我可能想传递一些不是dict的东西,但是实现了dict API.
类型检查仅检查代码中的许多可能错误之一.例如,它不包括范围检查(至少在Python中不包括).对需要进行类型检查的断言的现代响应是,开发单元测试更有效,这些单元测试不仅确保类型正确,而且确保功能正确.
另一个观点是,您应该将您的API用户视为同意成人,并相信他们正确使用API.当然有时候输入检查会有所帮助,但这种情况并不像你想象的那么常见.一个例子是来自不受信任来源的输入,例如来自公共网络.
答案几乎总是"不".Python,Ruby和其他一些语言的一般想法叫做" Duck Typing ".你不应该关心什么是什么,只关心它是如何运作的.换句话说,"如果你想要的只是嘎嘎叫,你不需要检查它实际上是一只鸭子."
在现实生活中,放入所有类型检查的问题是无法用替代实现替换输入.您可以检查dict,但我可能想传递一些不是dict的东西,但是实现了dict API.
类型检查仅检查代码中的许多可能错误之一.例如,它不包括范围检查(至少在Python中不包括).对需要进行类型检查的断言的现代响应是,开发单元测试更有效,这些单元测试不仅确保类型正确,而且确保功能正确.
另一个观点是,您应该将您的API用户视为同意成人,并相信他们正确使用API.当然有时候输入检查会有所帮助,但这种情况并不像你想象的那么常见.一个例子是来自不受信任来源的输入,例如来自公共网络.
简单的答案是不,使用多态性,异常等.
如果构造函数参数的类型错误,则在执行依赖于特定类型参数的代码时将抛出异常.如果它是一个奇怪的,域特定的东西,提出你自己的例外.环绕的代码块,可能会因try-except和handle错误而失败.因此最好使用异常处理.(函数参数也一样)
在属性中,适用相同的参数.如果要验证接收到的值,请使用断言检查其范围等.如果值类型错误,则无论如何都会失败.然后,处理AssertionError.
在Python中,您将程序员视为智能生物!只需很好地记录您的代码(使事情变得明显),在适当的地方引发异常,编写多态代码等.将构造中的异常处理(仅适用于它)/错误留给客户端代码.
警告将
异常处理留给客户端并不意味着您应该在不知情的用户处丢失大量垃圾错误.如果可能的话,处理由于构造错误或代码本身的任何其他原因而可能发生的异常.您的代码应该是健壮的.如果您无法处理错误,请礼貌地通知用户/客户端代码程序员!
注意
一般来说,构造函数的错误参数不是我担心的太多.