Категории

Область
Интерпретатор
ЯП
Проект

18 сентября 2014 г. 12:36 (ред. 24 сентября 2014 г. 17:22)
Эта статья о том, как важно быть последовательным. А также о том, почему иногда могут не работать проверки идентичности и наследования классов, и проверки принадлежности объекта к классу.
Пожалуй, большую часть из того, что я хочу сейчас вам рассказать правильнее было бы выразить в коде. Для наглядости. Итак, приступим:


Наверное, после запуска этого кода, особых пояснений больше не потребуется, однако пару слов я всё же скажу.

Итак, механизм импорта честно отрабатывает, выполняя то, что ему поручили, и в sys.modules появляется два разных модуля. Импортированный разными способами один и тот же класс, различается, помимо прочего, атрибутом __module__, который был проставлен в момент создания типа.

И, если вам вдруг интересно, где (помимо этого странного кода выше) можно натолкнуться на такое поведение, то я скажу, что в любых проектах со множеством [вложенных] модулей есть такой шанс. Например, в Django, создатели которого вовсе не зря советуют придерживаться одного стиля импорта, не мешать абсолютные с относительными.

Будьте последовательны, не забывайте про тесты.
Удачи!