断言 isinstance 不能按预期使用集合类型

assert isinstance doesn't work as expected with collection types

我写了这段代码:

def func(collection_type):
assert isinstance(collection_type,(list,set))
    

然后我写道:

func(collection_type=set)

我得到了 AssertionError

assert isinstance(collection_type,(list,set))。这将测试给定的 instances 是否属于 (list,set)。所以尝试使用列表实例或像这样设置,

func(collection_type=[1, 2, 3])func(collection_type={1, 2, 3}).

在 python 中,所有 class 都是 type class 的实例。因此,如果您像 func(collection_type=set) 一样传递 class 本身。它将检查 type,因为只有 (list,set) 在那里,它会引发 assertionError。

如果你想用空集测试,试试func(collection_type=set())