Как стать автором
Обновить

Комментарии 33

Скажите, а как/где сделали такой красивый скриншот?
Это gEdit, стандартная тема Cobalt, стандартная подстветка для Питона + шрифт Consolas от Микрософта. Дальше просто вырезал нужный фрагмент да сделал тень.
НЛО прилетело и опубликовало эту надпись здесь
тоже только из-за него зашел )))
Это для меня открытие года, сколько не кодил на питоне — такое впервые увидел.
НЛО прилетело и опубликовало эту надпись здесь
Боже, Python такой клёвый! Пожалуйста, сделай так чтобы он был еще очень быстрым!
да. но он пока еще только начинает развиваться… еще можно на PyPy посмотреть. они вроде как раз в процессе прикручивания JIT-компилятора
Вот за такое и люблю Питон — при желании можно сделать удобные и красивые вещи под конкретные задачи.
Не разделяю общих восторгов, хоть и являюсь фанатом python. Это скорее «не документированная» возможность, чем какая-то реальная вещь. А то что python милашка это и так ясно :D
Что значит не документированные? Есть документированный инструмент, а насколько ты умеешь им владеть зависит от тебя.
«не документированная» != не документированная
Открываем исходники Django и не порем чушь.
автор поста не представил ни одного прикладного примера, примеры в статье носят сугубо академический характер. И на джангу ссылок тоже не было.
И что? Это отменяет активное использование метаклассов в python?
Конечно питон-гуру могут меня поправить, но я считал метаклассами классы, создающие классы. Когда я говорил про «не документированную возможность» я говорил про использование именованых аргументов при создании класса(сабж статьи что тут сверху страницы). Так что научитесь читать и не порите чушь.
Ах, да я уже прочитал ваш коммент внизу, я вас раскусил, вы не читали статью, чукча-писатель решил похвастаться тем что открывал исходники джанги.
Да, вы правы.
вот именно за такие извращения я и люблю python )
но что-то я не могу представить где это может понадобится. примеры неубедительны совсем…
Я тоже сначала статью закончил словами, что в реальности это практически нигде не пригодится. Только как-то мрачно получалось, поэтому убрал. Думаю, что стоит расценивать только как демонстрацию гибкости Питона.
class Artist(MyRe, '/artist/\d+'): pass

Предлагаю заменить на что-то вроде makeRe('Artist', '/artist/\d+'), которое будет возвращать класс.
Или недостаточно красиво?
тогда вложенные классы (как в примере) не получится так красиво сделать
А так?

class Music(MyRe):
pattern = '/music'

Artist = '/artist/\d+'
Song = '/song/\d+'
Album = '/album\d+'

Правда, в данном случае мета-классу MyRe нужно будет озадачиться конвертацией аттрибутов.
Может быть, со мной что-то не так, но мне такой вариант действительно кажется более симпатичным, чем «class Artist(MyRe, '/artist/\d+'): pass».
я с вами в чем-то согласен. не то что симпатичнее, скорее привычней :)

я потому и спросил у автора применение :) примеры не маштабируются: если таких атрибутов как pattern не 1, а 3-4, то передавать их в качестве базовых классов уж совсем некрасиво выходит…
А наследование?
Поясняю.
Мне кажется, что запись «makeRe('Artist', '/artist/\d+')», возвращающая новый полноценный класс, менее магична, более проста и понятна, чем «class Artist(MyRe, '/artist/\d+'): pass».
Не вижу никаких проблем для наследования, либо не понимаю вашего вопроса.
Конечно, это менее магично. Но наследования все равно не получится:
class Artist(MyClass, '/artist/\d+'):
    pass

class RockArtist(Artist):
    pass
почему же?

Artist = makeRe('Artist', '/artist/\d+')

class RockArtist(Artist): pass
Или даже так:
Artist = makeRe('/artist/\d+')
class RockArtist(Artist): pass

Только зачем? О.о
мне когда-то самому нужно было что-то похожее. в итоге я воспользовался namedtuple :)
Автору спасибо за статью, жаль примеры у вас слабые, да и изначальный посыл не вдохновляет: )
А вот за ссылочки в конце статьи благодарен особенно. Всем, кто решил, что метаклассы это недокументированная магия, советую пройти по этим ссылкам.
А также традиционный совет — открываем django/db/models/base.py и смотрим на первый же класс, который на самом деле метакласс.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории