Size: a a a

Хирьянов Т.Ф., Практика программирования на Python 3 (2019)

2020 October 22

K

Kotletoff in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
там расширений много
источник

.

. in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Kotletoff
почему все так расхваливают pycharm, когда он достаточно тяжёлый и интерфейс, как по мне, уступает vscode
Если у тебя компьютер на пентиуме и 2гб озу, то конечно он тяжелый
источник

YS

Yaroslav Savin in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
сашенька
Ребят, такая проблема. Как стать программистом? не достаточно же выучить один только синтаксис какого-нибудь языка, и называть себя программистом. Выучил я питон, а дальше продвинуться не могу. Стою на месте, не зная с чего начать
Пили свой проект при этом гугля всё, что не знаешь
источник

YS

Yaroslav Savin in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Банально - какая-нибудь веб тудушка, бот для телеги/вк/дискорда
источник
2020 October 23

DK

Denis Kostin in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Добрый день! Я новичок в питоне (да и в других языках не особо профи), но как я понял в питоне нет перегрузки методов. Подскажите как быть, если хочется сделать класс в питоне, который мог бы инициализироваться разными наборами данных? Например класс прямоугольника можно задать как rect = Rectangle(x, y, width, height) или как rect = Rectangle(x1, y1, x2, y2). Я вижу тут три варианта. Первый - внутри класса эти четыре параметра называются как-то невразумительно, типа arg1, arg2, arg3, arg4 и к ним добавляется пятый параметр например булева типа, который будет выбирать один из двух вариантов описания прямоугольника (можно даже ему значение по умолчанию поставить. Потом из этих параметров создаются в результате ветвления параметры экземпляра класса с нормальными названиями. Другой вариант сделать шесть (или даже восемь) параметров у класса инит с вразумительными названиями переменных и значениями по умолчанию None. А пользователь уже конкретно будет вписывать поименно параметры которые у него есть по факту. Вроде rect = Rectangle(x=10, y=20, width=100, height=50). Третий вариант - писать несколько разных псевдоинициализирующих функций с разными наборами. Реальная инициализация экземпляра класса rect = Rectangle(), а далее  rect.change_place_and_size_1(x, y, width, height) или rect.change_place_and_size_2(x1, y1, x2, y2). Опыта нет, а найти ответ в интернете оказалось не так просто. Может есть еще какой-то способ для таких случаев - более специфический? Если нет, то какая практика более предпочтительная на Ваш взгляд?
источник

OM

Oleg Makarikhin in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Denis Kostin
Добрый день! Я новичок в питоне (да и в других языках не особо профи), но как я понял в питоне нет перегрузки методов. Подскажите как быть, если хочется сделать класс в питоне, который мог бы инициализироваться разными наборами данных? Например класс прямоугольника можно задать как rect = Rectangle(x, y, width, height) или как rect = Rectangle(x1, y1, x2, y2). Я вижу тут три варианта. Первый - внутри класса эти четыре параметра называются как-то невразумительно, типа arg1, arg2, arg3, arg4 и к ним добавляется пятый параметр например булева типа, который будет выбирать один из двух вариантов описания прямоугольника (можно даже ему значение по умолчанию поставить. Потом из этих параметров создаются в результате ветвления параметры экземпляра класса с нормальными названиями. Другой вариант сделать шесть (или даже восемь) параметров у класса инит с вразумительными названиями переменных и значениями по умолчанию None. А пользователь уже конкретно будет вписывать поименно параметры которые у него есть по факту. Вроде rect = Rectangle(x=10, y=20, width=100, height=50). Третий вариант - писать несколько разных псевдоинициализирующих функций с разными наборами. Реальная инициализация экземпляра класса rect = Rectangle(), а далее  rect.change_place_and_size_1(x, y, width, height) или rect.change_place_and_size_2(x1, y1, x2, y2). Опыта нет, а найти ответ в интернете оказалось не так просто. Может есть еще какой-то способ для таких случаев - более специфический? Если нет, то какая практика более предпочтительная на Ваш взгляд?
в отличие от c-подобных языков, тут метод, в данном случае коструктор единый.
если хочешь чтобы функция-метод вызывались с разными типами или количеством параметров и по-разному реагировали - то нужно это реализовывать внутри метода.
в питоне могут быть позиционные аргументы: f(1,2,3)
именованные аргументы f(arg1=1, arg2=2, arg3=3) , можно менять местами f(arg2=2, arg1=1, arg3=3)
и можно смешанные но при вызове сперва позиционные потом именованные.
источник

DK

Denis Kostin in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
количество параметров в сущности всегда одинаковое - четыре, но вот что они означают - это может отличатся
источник

DK

Denis Kostin in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
первые две точки это всегда будут координаты левого верхнего угла прямоугольника
источник

OM

Oleg Makarikhin in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
количество аргументов может быть разным, а также список именованных параметров может быть тоже динамическим,
 чтобы обрабатывать эти случаи существуют операторы звездочки, обычно аргументы так определяются *argv и  **kwargs
источник

DK

Denis Kostin in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
А вот как быть со вторыми двумя?
источник

OM

Oleg Makarikhin in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Denis Kostin
количество параметров в сущности всегда одинаковое - четыре, но вот что они означают - это может отличатся
тогда определяешь функцию которая принимает 4 аргумента и 5й аргумент возможно:
f(x1,x2,x3,x4 flag=значение_по_умолчанию)
источник

DK

Denis Kostin in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
то есть в моем длинном посте первый вариант предпочтительнее остальных?
источник

DK

Denis Kostin in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Он менее читабельный на мой взгляд
источник

DK

Denis Kostin in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
много комментов понадобится в итоге
источник

DK

Denis Kostin in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
и в том же пайчарме запуск инициализиации будет не оч выглядеть
источник

DK

Denis Kostin in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
когда будут подсказываться эти невразумительные переменные
источник

OM

Oleg Makarikhin in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Denis Kostin
то есть в моем длинном посте первый вариант предпочтительнее остальных?
если хочешь эти вызовы отличать :
Rectangle(x, y, width, height)  
Rectangle(x1, y1, x2, y2)
то можешь потребовать чтобы были именованные параметры
def init(x=None, y=None, width=None, height=None, x1=None, y1=None, x2=None, y2=None)  
 с помощью валидации аргументов проверяешь какой сценарий вызова был, раизишь ошибку если неверный
источник

DK

Denis Kostin in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
а как пользователям догадываться, что нужно выбрать только четыре параметра из восьми?
источник

DK

Denis Kostin in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
меньшего количества будет недостаточно, а большего - избыточно
источник

DK

Denis Kostin in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Какой-то философский вопрос у меня получился в целом:)
источник