2015-07-18 2 views
0

Вот примерWtforms isinstance не работает правильно

import wtforms 

isinstance(wtforms.StringField, wtforms.Field) 

Почему isinstance возвращает значение False? Если wtforms.StringField унаследован от wtforms.Field, потому что в этом случае должен возвращать isinstanse True. Почему он возвращает False? Как это исправить?

ответ

1

isinstance проверяет объект является экземпляром класса типа. В вашем случае wtforms.StringField является классом типа (который может действовать как объект, поскольку 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является подклассомdict.

Смежные вопросы