
p0123n
02.04.2016
22:50:57
Вот тут мне понравилось как написано: http://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python/
Кажется, там расширенный вариант этой презентации :-)

Aleksandr
02.04.2016
22:52:04
930down voteaccepted
A metaclass is the class of a class
Мне кажется это вообще непонятно

Google

Aleksandr
02.04.2016
22:52:38
Проще объяснить что class это просто sugar
Чем вот такие фразы задвигать

Andrey
02.04.2016
23:24:48

Serge
04.04.2016
09:30:43
говорят сегодня день веб-разработчика...

Dmitry
04.04.2016
09:32:36
?

Andrey
04.04.2016
09:54:00
Еще и такой придумали. А почему сегодня?

Dmitry
04.04.2016
09:54:25
404?

Aleksandr
04.04.2016
09:58:00
Именно )
(party)
?

Vitali K.
04.04.2016
09:59:17
А есть какие-то программистские песни?
Ну чтобы петь в караоке на праздник

GNU/Docker
04.04.2016
09:59:33
developers developers developers developer

Google

GNU/Docker
04.04.2016
09:59:34
s
из talk python to me
https://talkpython.fm/home/music

Serge
04.04.2016
10:00:42

Dmitry
04.04.2016
10:00:58
Там рэпчина для караоке не очень

Aleksandr
04.04.2016
10:05:08
Smixx – Developers (feat. Steve Ballmer)
Ну чтобы петь в караоке на праздник
developers developers developers developer

GNU/Docker
04.04.2016
10:06:42
:?

Aleksandr
04.04.2016
10:08:12
полное название песенки ж
а, сорян. По ссылке не перешёл

Fedor
04.04.2016
10:08:47
http://youtube.com/watch?v=BFZdBaIO0ac

Aleksandr
04.04.2016
10:09:01
Федь, ну это слишком модно )

Fedor
04.04.2016
10:09:07
Не рулишь на районе, но пишешь на питоне )

Aleksandr
04.04.2016
10:09:32
https://www.youtube.com/watch?v=LJvEIjRBSDA
И еще для старперов https://www.youtube.com/watch?v=Mxk5RMQF6Js
Каждый вирус должен повстречать свой фаервол (С)
Как всегда, фаервол решает все )

Serge
04.04.2016
11:00:32
продолжая первое апреля https://github.com/joshmaker/python-php

Google

Aleksandr
04.04.2016
11:02:46
Мощь и сила PHP
Сразу вспоминается твой рассказ про формирование PHP контекста в памяти )

Serge
04.04.2016
11:03:56
:)

Dmitry
04.04.2016
11:05:42
?

Serge
04.04.2016
11:17:22
есть, кстати, мысль перерассказать доклады Данила и Андрея с ITGM на митапах, чтобы записи сделать

Andrey
04.04.2016
11:19:09
В принципе можно, только я за то, чтобы помимо моего доклада было что-то еще, а то тем кто был позавчера вообще смысла приходить не будет

Serge
04.04.2016
11:19:23
да брось
ты же еще добавишь инфы и в этот раз я буду тебя слушать и задавать вопросы:)
вот про MultiDict в __prepare__ я в слайдах не увидел
можно еще про игры с __call__ в метаклассе расказать и что оно дает по сравнению с __new__

Andrey
04.04.2016
11:20:46
немного добавлю, да. но с этой обязанностью неплохо справлялся любитель метапрограммирования в лиспе Миша
про __call__ я рассказал

Serge
04.04.2016
11:21:13
в слайдах не видно
самое важное про call, что ему не обязательно вообще __new__ вызывать, т.е. там что угодно собрать можно, ага?
и там могут быть очень инетресные кейсы

Andrey
04.04.2016
11:22:15
ну вот в слайдах есть пример с синглтоном

Aleksandr
04.04.2016
11:22:46
Учет производных классов можно добавить.

Andrey
04.04.2016
11:23:09
Да, я его только на словах мельком упомянул

Aleksandr
04.04.2016
11:23:28
И потом фабричный метод к этому припаять.

Google

Aleksandr
04.04.2016
11:23:38
Ну в общем да, по сути просто добавить то, что ты и так сказал, но в слайд
Чтобы у людей вопросов не было )

Serge
04.04.2016
11:24:05
кейсы, больше кейсов
а вот вопрос на засыпку... хочу динамически менять класс объекта
есть мнение, что самый простой путь - сделать прокси до объекта и создавать новый объект за прокси, когда понадобится

Andrey
04.04.2016
11:28:39
то есть ты хочешь сохранить __dict__ объекта, а менять его родительский __dict__?

Serge
04.04.2016
11:28:54
ну т.е. вот есть у меня некий объект, я его как-то использую, а потом вдруг я в нем узнаю, что этот объект должен быть инстансом какого-то класса и надо чтобы так и случилось, но прозрачно для пользователя объекта

Aleksandr
04.04.2016
11:29:22
Это по сути ... полиморфизм?

Andrey
04.04.2016
11:29:58
метод to_fooobj очень прозрачный

Aleksandr
04.04.2016
11:30:12
a.foo()
"foo"
...
a.foo()
"bar"
?

Serge
04.04.2016
11:30:20
метод to_fooobj очень прозрачный
нельзя метод, надо чтобы юзер ничего не понял, грубо говоря, должно сложиться ощущение, что он всегда был инстансом этого класса. предполагаем, что до момента смены класса, неважно какого класса это был инстанс
но! нельзя менять ссылку на объект
т.е. этот новый инстанс должен быть доступен по той же ссылке

Andrey
04.04.2016
11:32:24
тут может возникнуть явный конфликт, если будет использоваться функционал старого класса, которого нет в новом

Serge
04.04.2016
11:32:35

Andrey
04.04.2016
11:33:03
мечты, мечты. отлаживать это будет крайне сложно если оно возникнет

Serge
04.04.2016
11:33:21
пусть даже можно метод;) но что должен сделать этот метод? подменить self???

Aleksandr
04.04.2016
11:33:57
А создать два объекта и копировать __dict__ не подходит что ли?

Google

Andrey
04.04.2016
11:34:30
ну это видимо и предлагается в каком-то виде, только инкапсулированное

Aleksandr
04.04.2016
11:34:34
id будет один и тот же, но внутрянка будет меняться.

Serge
04.04.2016
11:36:16
в общем, похоже, что только прокси и много тестов, чтобы поведение всё проксировалось
Это про поддержку ODM в Mnj, если что;)

Aleksandr
04.04.2016
11:40:00
Не-не. Я предложил создать два объекта, чтобы полчить два готовых инстанса type. Затем выдавать объект третий, в который мы копируем либо __dict__ одного либо другого

Serge
04.04.2016
11:40:01
ну, кстати, в данном случае, прокси как раз даст точку приложения всяких обвесов, типа optimistic transactions и всего прочего...
isinstance(a, Foo) # False
id1 = id(a)
# magic
isinstance(a, Foo) # True
id2 = id(a)
id1 == id2 # True
вот что я должен куда копировать и когда создавать два объекта?

Andrey
04.04.2016
11:41:05
a.__class__ = Foo
работает

Serge
04.04.2016
11:41:20
а почему два? фишка в том, что я узнаю какой именно будет класс сильно позже создания объекта

Andrey
04.04.2016
11:41:42
реально. только что попробовал

Serge
04.04.2016
11:45:20
class A():
def foo(self):
print('foo')
class B():
def foo(self):
print('bar')
def to_A(self):
self.__class__ = A
In [9]: b.foo()
bar
In [10]: b.to_A()
In [11]: b.foo()
foo
надо еще проверить что с _dict_ будет

Andrey
04.04.2016
11:46:45
сохраняется

Serge
04.04.2016
11:46:57
от инстанса, наверное