LINUX.ORG.RU

Осилить питоновский ООП

 ,


0

5

Я знаю, как писать нормальный поддерживаемый код в ооп-парадигме на C# и С++. А в python вроде тоже есть ООП, но какой-то стремный и непонятный. Что бы такого почитать, чтобы понять, как писать питонячий код, чтобы в нем потом и я, и другие, могли разобраться?

Я знаю, как писать нормальный поддерживаемый код в ооп-парадигме на C# и С++

Не каждый это знает, не каждый... даже из тех, кто думает, что знает.

А в python вроде тоже есть ООП, но какой-то стремный и непонятный

Что стремного, что непонятного?

tailgunner ★★★★★
()
Ответ на: комментарий от vurdalak

Нельзя сделать несколько конструкторов с перегрузкой при разных типах аргументов, вместо геттеров и сеттеров какая-то мутная хрень. Есть ли в питоне виртуальные и не виртуальные функции, и так далее.

hlebushek ★★
() автор топика
Ответ на: комментарий от tailgunner

Что стремного

Ну как же, «динамически типизированный недоязычок» (с) tailgunner (tm)

Hertz ★★★★★
()

И интерфейсы / абстрактные классы в питоне нужны или нет? А то это вроде как противоречит утиной типизации.

hlebushek ★★
() автор топика
Ответ на: комментарий от newuser1001

Так, что если у нас динамическая утиная типизация, то зачем мне делать интерфейсы? Я просто где-то пытаюсь вызвать какой-то метод, и он там либо динамически находится, либо его нет.

hlebushek ★★
() автор топика
Ответ на: комментарий от hlebushek

вместо геттеров и сеттеров какая-то мутная хрень

Есть ли в питоне виртуальные и не виртуальные функции

Учебник читай.

tailgunner ★★★★★
()
Ответ на: комментарий от hlebushek

вместо геттеров и сеттеров какая-то мутная хрень

В смысле? Что тебе мешает написать геттер и сеттер?

Нельзя сделать несколько конструкторов с перегрузкой при разных типах аргументов

Логично, потому что динамическая типизация.

Не вижу ничего странного, всё там логично. Тебе просто нужно запомнить особенности типизации и отсутствия модификаторов доступа.

vurdalak ★★★★★
()
Ответ на: комментарий от hlebushek

Нельзя сделать несколько конструкторов с перегрузкой при разных типах аргументов

Use factory method, Luke. Или это, в Питоне низя делать class-side methods?

yoghurt ★★★★★
()
Ответ на: комментарий от vurdalak

В смысле? Что тебе мешает написать геттер и сеттер?

То, что там предполагается для этого использовать __getattribute__() и __getattr__()

hlebushek ★★
() автор топика
Ответ на: комментарий от hlebushek

Где «там» и кем предполагается? Я вот пишу get_myattr() и оно работает.

vurdalak ★★★★★
()

Осилить питоновский ООП

такой же, просто ограниченный, что там осиливать?

umren ★★★★★
()

А еще в питоне нет нормальных приватных членов, а вместо этого можно писать либо _foo, либо __foo, который будет превращаться в _classname__foo. И что из этого использовать?

hlebushek ★★
() автор топика

Я знаю, как писать нормальный поддерживаемый код в ооп-парадигме на C#

C#

Не удивительно, что после этого ты ничего не понимаешь.

Siado ★★★★★
()
Ответ на: комментарий от Bad_ptr

Да, похоже, ошибся. Я раньше думал, что слабая==утиная. Черт голову сломит в этих типизациях. Даже голову забивать не буду:)

newuser1001
()
Ответ на: комментарий от newuser1001

В этом весь анонiмус. «Не читал, но осуждаю», «Если я не знаю, то это не нужно», «Если я не осилил, то это говно».

Интересно наверно жить в своём пластиковом барби-мирке, а?

anonymous
()
Ответ на: комментарий от yoghurt

Или это, в Питоне низя делать class-side methods?

Все можно, и статичные методы и класс-методы. Только по типам диспатчинга нет.

loz ★★★★★
()
Ответ на: комментарий от hlebushek

Там предлагается для этого использовать property. Читай нормальный учебник.

К __getattr__/_getattribute__ нубу вообще лезть противопоказано.

Virtuos86 ★★★★★
()
Ответ на: комментарий от Virtuos86

ОМГ. Зачем ты это делаешь?

Что не так?

Когда свойства стали простыми декораторами?

Когда - не знаю, гуглить лень.

Vovka-Korovka ★★★★★
()
Ответ на: комментарий от hlebushek

Нельзя сделать несколько конструкторов с перегрузкой при разных типах аргументов

Можно сделать один конструктор, который будет по-разному действовать на разных типах аргументов.

вместо геттеров и сеттеров какая-то мутная хрень.

Кто тебе мешает сделать геттеры и сеттеры?

Есть ли в питоне виртуальные и не виртуальные функции

Потомки могут переопределить любой метрд класса. Ну кроме __private_function. Но и его могут, если постараются.

We're all consenting adults here, как сказал ван Россум, поэтому если что-то можно оставить на уровне соглашения программистов, то это предпочтительнее, чем сильное усложнение языка.

В Питоне ООП находится в переходном состоянии между Java и Lua.

proud_anon ★★★★★
()
Ответ на: комментарий от proud_anon

Можно сделать один конструктор, который будет по-разному действовать на разных типах аргументов.

Слишком сложно - надо трахаться со всякими isinstance, да и вообще это не по-утиному, не по-питонячьи. Мы не должны проверять типы, мы должны проверять, крякает или нет.

Потомки могут переопределить любой метрд класса. Ну кроме __private_function. Но и его могут, если постараются.

Ну я уже прочитал, что там все функции виртуальные. А если мы попереопределяем функции, то старые функции, зависящие от переопределенных функций, не сломаются? Почему?

В Питоне ООП находится в переходном состоянии между Java и Lua.

Интересная заявка, учитывая, что в джава вообще самый оопный ооп в мире (smalltalk не считается, ведь это даже не настоящий язык), а lua - скриптовый недоязык для встраивания в игры.

hlebushek ★★
() автор топика
Ответ на: комментарий от hlebushek

Слишком сложно - надо трахаться со всякими isinstance, да и вообще это не по-утиному, не по-питонячьи.

Ну тогда не надо так делать.

А если мы попереопределяем функции, то старые функции, зависящие от переопределенных функций, не сломаются?

Если интерфейс будет такой же, как и положено при переопределении, то не сломаются. Ситуация-то ведь точно такая же, как в Java, только без битья программистов по рукам.

в джава вообще самый оопный ооп в мире

А в Lua полностью прототипное наследование, реализованное на основе аналога питоновского __getattr__. А Питон остановился посередине.

proud_anon ★★★★★
()

Подумай немного о прототипном ооп, в js, о прототипном наследовании, отсутсвии строгой типизации...

Вообщем всё тоже самое, как в js, только есть синтаксический сахар для классов.

pon4ik ★★★★★
()
Ответ на: комментарий от hlebushek

А если мы попереопределяем функции, то старые функции, зависящие от переопределенных функций, не сломаются? Почему?

В питоне объекты указываются по ссылке, а не по значению. Ничего не сломается.

Virtuos86 ★★★★★
()
Ответ на: комментарий от Vovka-Korovka

Да, ладно, C# очень приятный язык.

А это правда, что в C# лямбды представляются в виде строк?

В смысле в MS .NET.

ados ★★★★★
()
Последнее исправление: ados (всего исправлений: 2)
Ответ на: комментарий от hlebushek

smalltalk не считается, ведь это даже не настоящий язык

Что, если язык не является диалектом C то он уже не настоящий язык?

ados ★★★★★
()
Последнее исправление: ados (всего исправлений: 1)
Ответ на: комментарий от ados

Из чего создаётся лямбда во время работы программы?

Из вот этой штуки - x => x * x

И в каком виде это скомпилируется?

В виде чего-то, у чего можно вызывать оператор скобочки.

hlebushek ★★
() автор топика
Ответ на: комментарий от hlebushek

Из вот этой штуки - x => x * x

Верно. Я говорил скомпилируется в строчку «x => x * x» и во время работы программы эта строчка достаётся из структуры по идентификатору и компилируется. Это так?

ados ★★★★★
()
Последнее исправление: ados (всего исправлений: 1)
Ответ на: комментарий от ados

Это конечно же зависит от платформы. В данном случае вопрос к самой ходовой платформе. Однако злые языки говорили что в mono то же самое.

ados ★★★★★
()
Ответ на: комментарий от newuser1001

В php слабая типизация, но не утиная. там куча вещей ВотТакаяФункцияДляСтрок, для_массивов_такая_функция, ЕщёЧегоТоДляФункцияТакая, делающих одно и то же.

В python - строгая типизация, но утиная.

Черт голову сломит в этих типизациях.

в двух словах:

если можешь сделать a = '2' + 2 - это слабая

если можешь сделать a = 2, затем a = '2' - это динамическая

если у тебя функции ориентируются не на тип данных, а на их возможности (умеет ли объект то-то и то-то) - это утиная

buratino ★★★★★
()
Ответ на: комментарий от buratino

ЕщёЧегоТоДляФункцияТакая

точнее, наверно, ещчегфунтак

buratino ★★★★★
()
Ответ на: комментарий от hlebushek

Можешь проверять тип внутри, в чем проблема?

deterok ★★★★★
()
Ответ на: комментарий от hlebushek

И интерфейсы / абстрактные классы в питоне нужны или нет?

Интерфейсы / абстрактные классы — они не в питоне. Интерфейсы / абстрактные классы — они в головах.

t184256 ★★★★★
()
Ответ на: комментарий от ados

Судя по проведённым мною тестам с mono кто-то мне про лямбда-строки нап*ел.

ados ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.