@ru_python

Страница 1682 из 9768
Pavel
03.11.2016
01:50:27
3.5 и 3.6 это минорные версии третьего питона? Прикольно.

Oleksandr ror191505
03.11.2016
01:52:21
Оно всегда и было

Обратная совместимость сохранена полностью

Код, который написан был на 3.4, на 3.6 работать будет

Google
fox.hs
03.11.2016
03:15:37
Оригинальное имя

First name (required)
03.11.2016
03:16:28
А то :)

fox.hs
03.11.2016
03:16:46
:)

Nikolay
03.11.2016
03:17:46
че просили, то и заполнил

First name (required)
03.11.2016
03:18:17
Пользуюсь хинтами правильно

fox.hs
03.11.2016
03:26:09
Кравчик!

First name (required)
03.11.2016
03:30:05
Прочитал Саммерфилда, дочитываю Лутца про изучение питона, думаю, наконец-то закончилась эта долговязка книжка, а потом понимаю, что когда Лутц ссылается на "Программирование на Python", то он имеет ввиду свою книгу на 1000 стр...

First name (required)
03.11.2016
03:31:55
да я toc прочитал, там половина tkinter'a - не люблю

Роман
03.11.2016
03:32:55
а что из саммерфилда читал?

First name (required)
03.11.2016
03:34:32
а что из саммерфилда читал?
"Программирование на python", на этом моя шутеха и строилась :)

Google
First name (required)
03.11.2016
03:35:25
Когда Лутц планирует протяженность своей книги, он делит на ноль

Nikolay
03.11.2016
03:37:29
синтаксис, best practices заценил и в бой, не?

Leonid
03.11.2016
03:37:30
Когда Лутц планирует протяженность своей книги, он делит на ноль
Какая-то книга попадалась там приятная подача,современный питон что ли называется

Nikolay
03.11.2016
03:37:33
это же не си

оф.дока еще

Роман
03.11.2016
03:38:43
синтаксис, best practices заценил и в бой, не?
это когда уже один язык знаешь

First name (required)
03.11.2016
03:38:55
Для души читаю, я вообще по Android/java части

Leonid
03.11.2016
03:39:31
Для души читаю, я вообще по Android/java части
Читай Достоевского для души лучше)

I'm_your_god
03.11.2016
03:52:36
хочу снова вернуться к вопросу о наследовании... вот есть некий общий класс class A(object): def __init__(self, lol=None, gol=None): self.lol = lol self.gol = lolесть наследник class B(A): def __init__(self, mol=None, **kwargs): super(B, self).__init__(**kwargs) self.mol = Noneи вот я хочу получить инстанс от B. Меня волнует сейчас только то, что я виду, что класс B явно хочет получить от меня mol, но он ни слова не говорит про lol и gol, которые есть в родительском классе. То есть на плечи разработчика ложиться обязанность проверять, что ещё требуется прокинуть в класс B? Я имею ввиду вот если lol - обязательный аргумент, но в классе B в аргументах его нет. И пока я не получу инстанс от B и не увижу ошибку, что lol обязателен, я никак и не узнаю, что этот аргумент нужен? тот же pycharm не покажет, что в B кроме mol ещё и lol и gol прокинуть можно... как с этим бороться? :D

First name (required)
03.11.2016
04:10:36
Но подожди, в этом коде lol же необязательный :) и тут скорее вопрос проектирования, геттеры и эксепшены помогут

I'm_your_god
03.11.2016
04:12:24
ну, представь, что там он обязательный

First name (required)
03.11.2016
04:14:46
ассерт тогда, и, мне кажется, с конструктором беда

I'm_your_god
03.11.2016
04:14:52
мне не нравится, что нужно лезть в класс-родитель и смотреть что ему нужно, что не нужно, поэтому и спрашиваю, есть ли другие подходы?

First name (required)
03.11.2016
04:17:49
я бы не использовал **, это стрельба в ногу, имхо, дождись пока ответят гуру питона

Oleksandr ror191505
03.11.2016
04:19:39
Я чет не ловлю в чем проблема

Если аргументы есть обязательные и они не были переданы, то будет эксепшн

First name (required)
03.11.2016
04:20:04
в многообразии вариантов

Oleksandr ror191505
03.11.2016
04:20:17
Если аргументы не обязательные, то будет взято дефолтное значение

То, что пайчарм не показывает, это все проблемы интроспекции в питоне ввиду его природы

I'm_your_god
03.11.2016
04:26:27
а если аргументы обязательные, то всё сломается. Вот я про это и спрашиваю, есть класс родитель со своим инитом в которм может быть написано всё, что угодно и для его правильной работы один аргумент обязателен. Но в классе наследнике я же этого не знаю, пока не подорвусь на ошибке или не загляну в родителя.

Google
Oleksandr ror191505
03.11.2016
04:26:58
С чего вдруг ты этого не знаешь?

Тебе божество запрещает зажать контрол и кликнуть на название класса родителя? (в пайшарме)

First name (required)
03.11.2016
04:31:08
еще раз, тут вопрос проектирования, если родительский класс был написан нормально, то все будет ок, а если он еще абстрактный, то все вообще хорошо

Oleksandr ror191505
03.11.2016
04:31:49
Если он абстрактный, то ты точно так же словишь эксепшон

Если не реимплементируешь какой-либо метод или пропертю

First name (required)
03.11.2016
04:32:04
да, и пойдешь сделаешь как надо

I'm_your_god
03.11.2016
04:32:05
как по мне, это неправильный подход. Меня, как пользователя класса наследника, не должно волновать, что там в родителе. Я смотрю определение наследника и вижу, что ему для работы надо 2 аргумента. Но в примере, который я выше скидывал, это не ясно, это не видно def __init__(self, mol=None, **kwargs):только один аргумент принимается, про второй ни слова, или про третий

Oleksandr ror191505
03.11.2016
04:32:17
Ну

Тебя как пользователя волнует объект, который получится из этого говна

First name (required)
03.11.2016
04:32:45
П - проектирование

Oleksandr ror191505
03.11.2016
04:32:57
А как программиста тебя волнует класс наследник, который ты пытаешься нафигачить поверх неизвестной тебе балалайки

Ты наугад наследуешься что-ли?

Oleksandr ror191505
03.11.2016
04:33:10
Нет

First name (required)
03.11.2016
04:33:21
надо понимать если лезть туда, так надо будет погрузится

Oleksandr ror191505
03.11.2016
04:33:34
Никто не мешает тебе сделать не *args, **kwargs, а прописать все в явном виде

Это тебе не С++, где то, что ты хочешь, еще на этапе компиляции в тебя ошибкой бросит

First name (required)
03.11.2016
04:34:11
именно это я и пытаюсь сказать уже сообщений 10)

Oleksandr ror191505
03.11.2016
04:34:12
Здесь все ошибки только во время исполнения

First name (required)
03.11.2016
04:34:36
не только ошибки, а вообще все

I'm_your_god
03.11.2016
04:34:37
никто не мешает, но если там аргументов штук 6? в строку не входят, некрасиво там или ещё какая бодяга

Google
Oleksandr ror191505
03.11.2016
04:35:02
Просто пиздец

*простите на добром слове*

И так не так

И так не этак

I'm_your_god
03.11.2016
04:38:31
ок, господа, тогда как бы вы правильно отнаследовались/спроектировали? что бы я в наследнике сразу наверняка знал, что для его старта обязательны 2 агрумента. lol и mol class A(object): def __init__(self, lol=None, gol=None): self.lol = lol self.gol = lol class B(A): def __init__(self, mol=None, **kwargs): super(B, self).__init__(**kwargs) self.mol = None

Admin
ERROR: S client not available

Oleksandr ror191505
03.11.2016
04:38:31
У меня стоит этот том в оригинале. Все руки не поднимаются начать

Оно толстенное

First name (required)
03.11.2016
04:39:06
сделай аргументы не дефолтными

Oleksandr ror191505
03.11.2016
04:39:25
class A(object): def __init__(self, lol, gol=None): self.lol = lol self.gol = gol class B(A): def __init__(self, mol, lol, **kwargs): super(B, self).__init__(lol, **kwargs) self.mol = mol

вот так

I'm_your_god
03.11.2016
04:41:23
и это единственный путь?

Oleksandr ror191505
03.11.2016
04:41:36
это ПРАВИЛЬНЫЙ путь

First name (required)
03.11.2016
04:41:50
ну самый простой и правильный

Oleksandr ror191505
03.11.2016
04:41:52
по крайней мере в том виде, как описал это ты

I'm_your_god
03.11.2016
04:43:17
если у меня будет овер дофига аргументов, мне придётся их все вписать? магия *args/**kwargs оказывается никакая не магия а просто очередная наёбка, которая рано или поздно меня подведёт и я отстрелю себе ноги?

Oleksandr ror191505
03.11.2016
04:43:29
Блять

Ты должен понимать, что ты делаешь

Если ты понимаешь, что ты используешь - используй

Не понимаешь - не используй

Google
I'm_your_god
03.11.2016
04:43:49
Oleksandr ror191505
03.11.2016
04:43:51
Все

ИЗИ

Andrey
03.11.2016
04:44:17
super(B, self).__init__(lol, **kwargs) а почему не просто super().__init__(lol, **kwargs)

Oleksandr ror191505
03.11.2016
04:44:28
https://www.python.org/dev/peps/pep-3135/

вот пеп на изменение поведения супера

Pavel
03.11.2016
06:03:26
если у меня будет овер дофига аргументов, мне придётся их все вписать? магия *args/**kwargs оказывается никакая не магия а просто очередная наёбка, которая рано или поздно меня подведёт и я отстрелю себе ноги?
Если параметров лофига, то можно разбить класс на несколько или сделать специальный класс AOptions, в который накидать все твои параметры и передавать только один инстанс

First name (required)
03.11.2016
06:11:31
Ну любит человек использовать примитивы, что вы докапались

Alex
03.11.2016
06:17:53
Я для большинства таких случаев передаю dict.

First name (required)
03.11.2016
06:18:34
эксепс потом)

Alex
03.11.2016
06:19:34
First name (required)
03.11.2016
06:20:54
ну автор вопроса потом попытается вытащить значение, которого там может не быть, и получит исключение, и скажет, что недоволен нами

Oleksandr ror191505
03.11.2016
06:22:52
Расскажите мне реальный случай, когда классу нужно передать много аргументов. Много это, скажем, десяток

Alex
03.11.2016
06:23:11
:) Как бы нормально смотреть что ты в этот дикт пихаешь и только потом его передавать.

Страница 1682 из 9768