2016-06-09 5 views
1

я побежал следующий код в интерпретатор Python:«типа» команда в питон дает неожиданные результаты

>>> s 
<sqlalchemy.orm.session.Session object at 0x7f4fc8d69e10> 
>>> type(s) 
<class 'sqlalchemy.orm.session.Session'> 
>>> type(s) == sqlalchemy.orm.session.Session 
False 

(1) Почему переводчик говорят тип s не sqlalchemy.orm.session.Session, когда он просто сказал, что это было?

(2) Если команда type не работает, что лучше всего сказать, если объект является объектом Session? (Я пытаюсь использовать это в утверждении для проверки ввода функции)

(3) Просто для удовольствия я попытался сделать это с помощью примитивного типа, и это сработало. Почему здесь целые числа?

>>> type(3) 
<type 'int'> 
>>> type(3) == int 
True 
+0

Это работает для меня. 's = orm.session.Session(); type (s) == sqlalchemy.orm.session.Session -> True', что делает' isinstance (s, sqlalchemy.orm.session.Session) 'output? –

+0

@PadraicCunningham Возвращает True – Jessica

+3

Вам все равно лучше использовать isinstance. http://stackoverflow.com/questions/1549801/differences-between-isinstance-and-type-in-python –

ответ

2

Ваш s на самом деле является экземпляром подкласса sqlalchemy.orm.session.Session. Подкласс смущает также имя sqlalchemy.orm.session.Session.

Глядя на источник SQLAlchemy, представляется вероятным, что этот объект был произведен в sqlalchemy.orm.session.sessionmaker, который creates a subclass из Session по причинам, я не совсем ясно. Я не знаю, зарегистрировано ли это поведение; Я не нашел упоминания об этом в документах на быстрый взгляд.