@spbpython

Страница 311 из 785
GNU/Docker
02.03.2017
16:19:51
ну, ты по делу дискуссии ничего не сказал еще :) отсюда и вывод
Зато моё мнение сформировалось на основании того что я от тебя читаю тут последнее время:)

Serge
02.03.2017
16:20:00
и вот еще >>> issubclass(object, type) False >>> issubclass(type, object) True >>> type(type) <class 'type'> >>> type(object) <class 'type'>

Google
Serge
02.03.2017
16:20:38
там столько всего гвоздями в сях прибито, на этом уровне сложно говорить терминами класс/объект, потому что эти структуры их и определяют

Nikolay
02.03.2017
16:20:48
там в конце PyTypeObject, который указывает сам на себя

Serge
02.03.2017
16:21:38
так вот. мы приходим к тому, что type.__new__ и object.__new__ - это конструкции языка, которые нужны для разного и у них по разному прибиты сигнатуры

Serge
02.03.2017
16:22:33
а еще к тому, что метакласс - это такой наследник type (кстати не обязательно вообще-то), у которого __new__ вызывается с определнной, прибитой гвоздями сигнатурой

Serge
02.03.2017
16:24:50
погоди, в чем предназначение object.__new__?
я вижу куда ты клонишь, к тому что он собирает инстанс класса, а в type он собирает класс, который типа инстанс метакласса. ну так вот последнее - это популярное заблуждение, всё не совсем так:)

Nikolay
02.03.2017
16:25:22
но вообще раньше было путаницы еще больше - когда были classobj

сейчас все свели к циклу между object и type, в new-style классах

Serge
02.03.2017
16:26:05
метакласс - это структура, которая берет на себя работу type по сбору класса - да, но это лишь утилитарная работа, никакой особенной смысловой связи между метаклассом и классом нет, они не шарят методы, например, в отличии от класса и инстанса. это разные структуры совсем

Google
Serge
02.03.2017
16:27:22
поэтому type.__new__ - это совсем не то, что object.__new__, просто выбрали этот мето для этой работы из-за отдаленной похожести работы;)

Nikolay
02.03.2017
16:28:17
я писал чисто про питон
чисто про питон - у тебя есть просто два метода, __new__ и __init__, которые зовутся друг за другом при обращении к объекту по скобочкам :)

Serge
02.03.2017
16:28:29
в терминах реализации этого в питоне - не очень)
мы начали с того, что ты утверждал, что всё, у чего определен __new__ - это метакласс.

Nikolay
02.03.2017
16:28:31
первый контролирует создание инстанса, второй - "конструктор"

Serge
02.03.2017
16:28:55
Nikolay
02.03.2017
16:29:01
ну, т.е. конструктор то первый;)
конструктор в стиле сей - это второй

Serge
02.03.2017
16:29:15
Nikolay
02.03.2017
16:29:29
это просто неправда:)
ну как же неправда, когда правда

ладно

смотри

формально разница какая - у тебя object.__new__ должен возвращать инстанс объекта, а type.__new__ - инстанс typeobject, то есть класса

верно?

Serge
02.03.2017
16:30:16
конструктор в стиле сей - это второй
чо это? конструктор получает аргументы и делает из них инстанс. до вызова конструктора инстанса не было - это про __new__

Nikolay
02.03.2017
16:30:57
чо это? конструктор получает аргументы и делает из них инстанс. до вызова конструктора инстанса не было - это про __new__
__new__ определяет, как именно будет создаваться инстанс, какой фабрикой, например. Во внутреннее устройство инстанса он не лезет по дефолту, и конструктором не является

Serge
02.03.2017
16:32:32
__new__ определяет, как именно будет создаваться инстанс, какой фабрикой, например. Во внутреннее устройство инстанса он не лезет по дефолту, и конструктором не является
ну, это так разделили для лохов программистов на питоне, чтобы они self сами не собирали;) т.е. если у тебя уже есть __new__, то __init__ уже и не нужен. можно всё в new делать

Google
Nikolay
02.03.2017
16:32:33
ну... предполагается, что он это будет делать
именно, предполагается. Точно также предполагается, что если ты описываешь руками класс с методом __new__ - он будет в абсолютном большинстве случаев использоваться, как метакласс для какого-то другого класса

Nikolay
02.03.2017
16:33:12
это нарушает всю логику

согласен, Гвидо ввел неоднозначность двумя методами :)

Nikolay
02.03.2017
16:34:39
да нет же. я же про object.__new__ здесь
какое отношение имеет внутренняя реализация метода к кастомному конструктору?

Serge
02.03.2017
16:35:38
какое отношение имеет внутренняя реализация метода к кастомному конструктору?
потому что он не может собрать новый класс, ну не должен:) он собирает инстанс конкретного класса

Nikolay
02.03.2017
16:35:56
ни разу определение в наследнике object метода __new__ не делает его метаклассом
сразу же сделает, как только ты его используешь, как метакласс

Nikolay
02.03.2017
16:36:03
вся проблема в динамичности питона))

Serge
02.03.2017
16:36:07
потому что он не может собрать новый класс, ну не должен:) он собирает инстанс конкретного класса
можно и другого класса инстанс выдать, за этим никто не следит в питоне, да, но это не значит, что оно метакласс:)

Nikolay
02.03.2017
16:36:34
Serge
02.03.2017
16:36:34
сразу же сделает, как только ты его используешь, как метакласс
только я должен буду уже сигнатуру type использовать, а не object

Serge
02.03.2017
16:37:06
ну как не может, когда он это и делает в общем случае :)
обычно люди в object.__new__ таки свой класс используют

Admin
ERROR: S client not available

Nikolay
02.03.2017
16:37:43
обычно люди в object.__new__ таки свой класс используют
обычно люди object.__new__ не пишут в принципе, если не хотят магии при конструировании инстанса

Google
Serge
02.03.2017
16:37:49
согласен
ну так вот. извращаться можно сколько угодно. но просто определение __new__ в наследнике object не делает его метаклассом

ну так вот. извращаться можно сколько угодно. но просто определение __new__ в наследнике object не делает его метаклассом
и, возможно, это и вопрос терминологии, но подобные утверждения вызывают подозрение в твоей адеквтаности, правда:)

Nikolay
02.03.2017
16:38:53
Serge
02.03.2017
16:38:57
все инструменты, которыми ты не владеешь, кажутся тебе магией.

Nikolay
02.03.2017
16:39:30
я на питоне много лет пишу уже и знаю, как оно работает, просто иногда люблю упрощать

просто потому что питоновская реализация действительно содержит много неоднозначностей

и двояких трактовок

Serge
02.03.2017
16:40:06
Nikolay
02.03.2017
16:40:57
только моя - общепринятая. хотя бы в PEP-ах:)
есть пепы, а есть код, который люди пишут :) если бы я увидел в продакшен-коде object.__new__ - я бы довольно сильно удивился, наверное

потому и говорю - имхо, на моем опыте, люди не используют __new__, если не хотят метаклассы

пусть это и не совсем верное утверждение с точки зрения стандартов и гибкости

b0g3r
02.03.2017
18:25:24
Вечера! Ищу производственную летнюю практику с Python'ом в СПб О себе: Студент 3 курса IT-специальности в техноложке Умею в python (django, pyqt5) - github.com/b0g3r Немного умею в Java и C++ Английский - pre-intermediate (поднимаю уровень сейчас, может к лету уже буду без пре) Почта: boger.dmitriy@gmail.com Буду также рад любым советам и предложениям куда обратить свой взор и куда написать :)

Dmitry
02.03.2017
18:28:03
вот, это чёткая селф-презентация. надо остальным ставить в пример )

b0g3r
02.03.2017
18:29:39
Ты же денег хочешь, да?
Ну хочу, ну так, чтоб пирожок с кофе

Скорее не хочу формальную стандартную вузовскую летнюю практику

Sergey
02.03.2017
18:53:50
Эх, где такой чатик был год назад, когда у меня была летняя практика на носу :с

Google
Serge
02.03.2017
19:03:00
@lig11, а когда ДР чата?
про чат не скажу. официально мы считаем ДР этой инкарнации сообщества по данным вот тут https://www.meetup.com/spbpython/

Founded Jan 23, 2015
а вот и про чатик нашлось https://plus.google.com/+SergeMatveenko/posts/Ynn5oudTpmU оно еще раньше O_O внезапно

Serge
02.03.2017
19:08:29
а вот первый пост на spbpython.guru https://plus.google.com/+MaksimLeonov/posts/hC5exX2U9jR

Страница 311 из 785