У каждого объекта всего один тип, который не меняется в течение жизни объекта (тип может поменяться в чрезвычайно редких обстоятельствах. Для этой задачи не существует API, и вы вряд ли читали бы эту статью, если бы работали с объектами с изменяющимися типами)
В большинстве же случаев можно ведь присваивать магическому атрибуту __class__ новый тип, чем не API? Причем Питон проверяет совместимость memory layout объектов старого и нового типов (то есть такой трюк не сработает, например, для tuple или если один из типов имеет пользовательские слоты), и после смены типа объект действительно ведет себя по-новому.
Или все-таки я чего-то недопонимаю, и даже в этом случае ob_type продолжает указывать на первоначальный тип?
P.S. Спасибо за интересные статьи, продолжайте в том же духе! :)
Во-первых, еще как повторяется, по крайней мере большую часть спама получал от 4-5 шараг вроде заказа такси или пиццы. Во-вторых, не сочтите за рекламу, но они, похоже, и вправду работают, спама стало в разы меньше. В двух случаях после отправления заявки через какое-то время прислали имейл, что меня убрали из рассылки, и в двух — с инструкцией, куда позвонить, чтобы попросить отписаться самому.
Не проще ли настроить, чтобы раскладка была не глобальной, а привязывалась к текущему окну? В Минте (и наверное в Гноме вообще) это в настройках Keyboard Layout -> Layouts. Наверняка же в MacOS такое тоже есть.
Очень хорошая статья и очень знакомая проблема, которую мы в своем проекте (тоже, кстати, embedded ось) решали вот так: habrahabr.ru/post/144935/
Те же интерфейсы и абстрактные модули, те же glue-header'ы, то же самое внедрение зависимостей (правда, еще и в рантайме). Но у вас, конечно, здорово получилось, что не нужно поддерживать никаких дополнительных файлов с метаданными для билд-системы. Этакие self-hosted исходники, очень круто!
Использовал Eclipse года 4 для Java, Android, C и немного Python. Сейчас перешел на ST2, Eclipse только для отладки. Очень напрягает отсутствие fuzzy-поиска и автодополнения и множество раздражающих панелей/окон, которые норовят отобрать фокус у панели редактирования. Плюс ко всему общая тормознутость и монструозность этой IDE.
Из полезных хоткеев, в дополнение к упомянутым в статье, могу назвать следующие:
Ctrl+F6 / Ctrl+Shift+F6 — следующий/предыдущий редактор в стеке (аналог Alt+Tab для окон).
Поскольку более неудобных сочетаний для такой часто используемой операции (ИМХО) придумать тяжело, поэтому имеет смысл переназначить их на Ctrl+Tab / Ctrl+Shift+Tab (или на Alt+` / Alt+Shift+` для CDT, чтобы не было конфликтов с переключением между source/header).
Ctrl+Shift+Up / Ctrl+Shift+Down — переход к следующей/предыдущей функции (в CDT, думаю, в Java аналогично для методов)
Ctrl+J / Ctrl+Shift+J — инкрементальный поиск начиная от курсора (без использования окна поиска, как при Ctrl+F)
Еще есть Ideone, который позволяет компилить и запускать куски кода на куче разных языков.
Часто встречал (и сам использовал), например, в ответах на Stack Overflow. Пишется кусок кода и дается ссылка на результат выполнения.
Описание с сайта:
What is ideone?
Ideone is something more than a pastebin; it's an online compiler and debugging tool which allows
to compile and run code online in more than 40 programming languages.
How to use ideone?
Choose a programming language, enter your source code and input data into text boxes. Then check or uncheck run code (whether to execute your program) and private (whether not to list your code in the recent codes page) checkboxes, click the submit button and watch your snippet being executed.
В большинстве же случаев можно ведь присваивать магическому атрибуту
__class__новый тип, чем не API? Причем Питон проверяет совместимость memory layout объектов старого и нового типов (то есть такой трюк не сработает, например, для tuple или если один из типов имеет пользовательские слоты), и после смены типа объект действительно ведет себя по-новому.Или все-таки я чего-то недопонимаю, и даже в этом случае ob_type продолжает указывать на первоначальный тип?
P.S. Спасибо за интересные статьи, продолжайте в том же духе! :)
UPD.
Опс…
Те же интерфейсы и абстрактные модули, те же glue-header'ы, то же самое внедрение зависимостей (правда, еще и в рантайме). Но у вас, конечно, здорово получилось, что не нужно поддерживать никаких дополнительных файлов с метаданными для билд-системы. Этакие self-hosted исходники, очень круто!
Из полезных хоткеев, в дополнение к упомянутым в статье, могу назвать следующие:
Поскольку более неудобных сочетаний для такой часто используемой операции (ИМХО) придумать тяжело, поэтому имеет смысл переназначить их на Ctrl+Tab / Ctrl+Shift+Tab (или на Alt+` / Alt+Shift+` для CDT, чтобы не было конфликтов с переключением между source/header).
Часто встречал (и сам использовал), например, в ответах на Stack Overflow. Пишется кусок кода и дается ссылка на результат выполнения.
Описание с сайта:
Другое дело, что в документации рекомендуется использовать именно Makefile, чтобы в листинге директории видеть его сверху. Пруф.