How can I avoid type checking a python object if its attributes aren't used?
我在这里遇到了一般类型检查、数字类型检查和字符串类型检查的答案。大多数人似乎回答说,由于duck类型,不应该在python(<2.6)中执行类型检查。我对duck类型的(有限)理解是,类型是由使用对象的属性决定的。如果不使用任何属性,我该怎么做?
我有一个简单的函数,它根据参数确定常量,参数应该是一个数字。我提出一个由
1 2 3 4 | class outOfBoundsError(ValueError): """ Specified value is outside the domain. """ |
告诉他们他们给我的号码太大了。我想保持这条信息的具体性。但是如果参数是一个字符串(如
注:我对abc一无所知,但我认为它们对我不可用,因为我们可以访问的最新python版本是2.5:。
对于这个问题,一个常见的鸭子式的Python解决方案是(尝试)将您得到的转换为您需要的。例如,如果需要整数:
1 2 3 4 5 | def getconstants(arg): try: arg = int(arg) except: raise TypeError("expected integer, or something that can be converted to one, but got" + repr(arg)) |
您执行某些只能在数字类型(如添加2)上执行的操作的想法类似,在许多情况下效果很好,但在可以转换为所需类型的字符串中失败,因此我更喜欢类型转换。
在这里,没有
我诚实的回答
Most people seem to respond by saying
that type checking should never be
performed in python (< 2.6) due to duck typing
是胡说八道。
类型检查是常见的做法。
不要全神贯注,不要接受未经过滤的每一句话。
您可以检查以确保您期望最初支持的类型。即
1 2 3 4 | def foo(arg): if not isinstance(arg, int): raise TypeError ... |
如果你只支持整数,那就没什么错。
内省对这个有用…基元类型也有类名:
1 2 3 4 5 6 7 | >>> i=2 >>> i.__class__.__name__ 'int' >>> s="two" >>> s.__class__.__name__ 'str' >>> |