a = ['a', 'b', 'c', 'd']
b = set(a)
print isinstance(a, types.ListType)
print isinstance(b, types.ListType)
结果显示b不是types.ListType。但是,Python中没有“SetType”。那么什么是'XXXType'类型,以便isinstance(b,types.XXXType)为True?
答案 0 :(得分:9)
使用isinstance(b, set)
。
对于内置类型的types
引用只是为了方便 * 而被弃用(它们已从Python 3.x version of the types
module中删除)。因此从未添加set
。
例如,types.ListType
只是list
的别名:
>>> import types
>>> types.ListType is list
True
>>> isinstance([1, 2, 3], list)
True
如果必须在SetType
模块中有types
引用,只需自行添加别名:
types.SetType = set
如果您要为基本容器类型寻找抽象基类,请使用collections
module ABCs;这些信号表示方法类型支持,并且检查这些类型可以让您检测支持特定操作的更广泛的类型集(而不仅仅是list
和{{1的实例类型):
set
* 历史课:曾几何时,像>>> from collections import Set, MutableSequence
>>> isinstance([1, 2, 3], MutableSequence)
True
>>> isinstance({1, 2, 3}, Set)
True
和int
这样的内置类型并不是真正的类,而且内置名称list
和int()
只是函数转换为内置类型。这意味着名称与list()
和types.IntType
不是同一个对象,并且 使用types.ListType
模块可以使用{{1在列表对象上。那个时间现在已经很久了,远远落后于我们,types
模块的作用发生了变化。