Comments 33
Скажите, а как/где сделали такой красивый скриншот?
Это для меня открытие года, сколько не кодил на питоне — такое впервые увидел.
Боже, Python такой клёвый! Пожалуйста, сделай так чтобы он был еще очень быстрым!
Слышал, но пока не пробовал.
Меня code.google.com/p/unladen-swallow/ вдохновляет
Меня code.google.com/p/unladen-swallow/ вдохновляет
Вот за такое и люблю Питон — при желании можно сделать удобные и красивые вещи под конкретные задачи.
Не разделяю общих восторгов, хоть и являюсь фанатом python. Это скорее «не документированная» возможность, чем какая-то реальная вещь. А то что python милашка это и так ясно :D
Что значит не документированные? Есть документированный инструмент, а насколько ты умеешь им владеть зависит от тебя.
Открываем исходники Django и не порем чушь.
автор поста не представил ни одного прикладного примера, примеры в статье носят сугубо академический характер. И на джангу ссылок тоже не было.
И что? Это отменяет активное использование метаклассов в python?
вот именно за такие извращения я и люблю python )
но что-то я не могу представить где это может понадобится. примеры неубедительны совсем…
но что-то я не могу представить где это может понадобится. примеры неубедительны совсем…
class Artist(MyRe, '/artist/\d+'): pass
Предлагаю заменить на что-то вроде makeRe('Artist', '/artist/\d+'), которое будет возвращать класс.
Или недостаточно красиво?
Предлагаю заменить на что-то вроде 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».
class Music(MyRe):
pattern = '/music'
Artist = '/artist/\d+'
Song = '/song/\d+'
Album = '/album\d+'
Правда, в данном случае мета-классу MyRe нужно будет озадачиться конвертацией аттрибутов.
Может быть, со мной что-то не так, но мне такой вариант действительно кажется более симпатичным, чем «class Artist(MyRe, '/artist/\d+'): pass».
А наследование?
Поясняю.
Мне кажется, что запись «makeRe('Artist', '/artist/\d+')», возвращающая новый полноценный класс, менее магична, более проста и понятна, чем «class Artist(MyRe, '/artist/\d+'): pass».
Не вижу никаких проблем для наследования, либо не понимаю вашего вопроса.
Мне кажется, что запись «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', '/artist/\d+')
class RockArtist(Artist): pass
Или даже так:
Artist = makeRe('/artist/\d+')
class RockArtist(Artist): pass
Только зачем? О.о
Artist = makeRe('/artist/\d+')
class RockArtist(Artist): pass
Только зачем? О.о
мне когда-то самому нужно было что-то похожее. в итоге я воспользовался namedtuple :)
Автору спасибо за статью, жаль примеры у вас слабые, да и изначальный посыл не вдохновляет: )
А вот за ссылочки в конце статьи благодарен особенно. Всем, кто решил, что метаклассы это недокументированная магия, советую пройти по этим ссылкам.
А также традиционный совет — открываем django/db/models/base.py и смотрим на первый же класс, который на самом деле метакласс.
А вот за ссылочки в конце статьи благодарен особенно. Всем, кто решил, что метаклассы это недокументированная магия, советую пройти по этим ссылкам.
А также традиционный совет — открываем django/db/models/base.py и смотрим на первый же класс, который на самом деле метакласс.
Sign up to leave a comment.
«Наследование» не от классов