Wtforms isinstance 无法正常工作

Wtforms isinstance not working correctly

这是一个例子

import wtforms

isinstance(wtforms.StringField, wtforms.Field)

为什么实例 return 是假的? 如果wtforms.StringField是继承自wtforms.Field,因为在这种情况下应该return isinstanse True。 为什么它 return 是错误的?如何解决这个问题?

isinstance 检查 object 是否是 class type 的实例。在你的例子中,wtforms.StringField 是一个 class 类型 (它可以像一个对象一样工作,因为 Python 有 first-class everything),并且有输入 type。为此,您实际上需要 issubclass

即:

>>> isinstance(OrderedDict(), dict)
True
>>> isinstance(OrderedDict, dict)
False
>>> isinstance(OrderedDict, type)
True
>>> issubclass(OrderedDict, dict)
True

OrderedDict 派生自 dict。因此,OrderedDict()的对象是dict的实例,而OrderedDict是[=36的子class =] dict.