如何比较Python中的对象类型?

2024-04-26 11:33:09 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上我想这样做:

obj = 'str'
type ( obj ) == string

我试过:

type ( obj ) == type ( string )

但没用。

另外,其他类型的呢?例如,我无法复制NoneType


Tags: obj类型stringtypestrnonetype
3条回答

isinstance作品:

if isinstance(obj, MyClass): do_foo(obj)

但要记住:如果它看起来像鸭子,如果听起来像鸭子,那么它就是鸭子。

编辑:对于“无”类型,您只需执行以下操作:

if obj is None: obj = MyClass()
isinstance()

在您的情况下,isinstance("this is a string", str)将返回True

你可能还想读这个:http://www.canonical.org/~kragen/isinstance/

首先,避免所有类型的比较。它们是非常非常不必要的。有时,它们有助于检查函数中的参数类型——即使这很少见。错误的类型数据将引发异常,这就是您所需要的全部。

所有的基本转换函数都将映射为等于类型函数。

type(9) is int
type(2.5) is float
type('x') is str
type(u'x') is unicode
type(2+3j) is complex

还有其他几个案子。

isinstance( 'x', basestring )
isinstance( u'u', basestring )
isinstance( 9, int )
isinstance( 2.5, float )
isinstance( (2+3j), complex )

顺便说一句,不需要这种类型的检查。None是NoneType的唯一实例。None对象是Singleton。检查一下没有

variable is None

顺便说一句,一般情况下不要使用上述方法。使用普通异常和Python自己的自然多态性。

相关问题 更多 >