Комментарии 7
Про синглтон оч понравилось. Сам пытался реализовывать синглтон на питоне. Делал через callable классы. Реализация на метаклассах выглядит намного изящнее :)
Я такой синглетон использую, хотя конечно формально это не настоящий синглетон.
<code>class Shared(object): __shared = None def __init__(self): if Shared.__shared is None: __shared = self.__dict__ else: self.__dict__ = __shared </code>
всётаки, расскажите подробнее про __mro__, множественное наследование,
и особенно про засаду со множественным наследованием от классов с разными метаклассами.
и особенно про засаду со множественным наследованием от классов с разными метаклассами.
Забавно, но мне кажется или ты действительно взял код синглтона из немного нашумевшего в русском Python-сообществе проекта Agatsuma?
bitbucket.org/FeiWongReed/agatsuma/src/2ce774d5c31a/agatsuma/commons/types/singleton.py
Тем не менее, у меня там более интересная версия, поддерживающая более удобный метод обращения с синглтонами — через __call__(инициализация обязана быть произведена заранее).
А так спасибо за такую серию статей, сам только начинал писать у себя в блоге, но ты меня избавил от такого труда.
Поправь «c() <=> type©.__call__(с)» на «c() <=> type(с).__call__(с)».
Стоит добавить в начале статьи что использование всей этой магии хакинга питона есть возможность при крайней необходимости и всю работу с ней нужно выносить в отдельный модуль с обильными комментариями и доктестом(как минимум).
Было бы хорошо почитать обзор изменений объектной модели Python в Python3.
bitbucket.org/FeiWongReed/agatsuma/src/2ce774d5c31a/agatsuma/commons/types/singleton.py
Тем не менее, у меня там более интересная версия, поддерживающая более удобный метод обращения с синглтонами — через __call__(инициализация обязана быть произведена заранее).
А так спасибо за такую серию статей, сам только начинал писать у себя в блоге, но ты меня избавил от такого труда.
Поправь «c() <=> type©.__call__(с)» на «c() <=> type(с).__call__(с)».
Стоит добавить в начале статьи что использование всей этой магии хакинга питона есть возможность при крайней необходимости и всю работу с ней нужно выносить в отдельный модуль с обильными комментариями и доктестом(как минимум).
Было бы хорошо почитать обзор изменений объектной модели Python в Python3.
документация говорит, что изменения словаря, возвращённого функцией
locals()
не обязательно будут применены. Не стоит пользоваться этим способом :)Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Заметки об объектной системе языка Python ч.3