LINUX.ORG.RU

Почему во многих Питон-проектах не используют async/await и ООП, как в Java?

 , , ,


2

1

Привет, всем. По работе смотрю новые питоновские проекты, и немного удивляет следующие детали:

  1. по сей день, пытаются все оформить сугубо через def() и форкать разные Py-скрипты через систему

  2. не смотря на наличие async/await в Python v3 - не используют и не пытаются

  3. если и объявят class , то он сугубо используется для DAO/DTO, ни каких сложных ОО-дизайнов не оформляется… type hints не испольуются, ABC-контракты не используются, GoF-паттерны тоже

  4. прикрываются якобы композицией, и что вообще ОО-дизайн - мертвый дизайн (у Golang лагеря насмотрелись, что ли?)

Говорю не про публичные проекты, которые в GitHub можно найти. А про многие, которые делает разработка в рос. компаниях. Картину наблюдаю на разных компаниях в течении последних двух лет.

Вот, я не пойму… Я что-то не понимаю или что? Вроде, появляются различные интересные фичи в Python3 , ряд вещей позволяет приблизится к написанию кода, как на Java.

Все-таки, Python не является Haskell, OCaml или каким-нибудь диалектом LISP. Это язык с элементами функциональщины, а не pure functional language, как Haskell. Так от чего не снабдить свой код asyncio, все граммотно оформить по ОО-дизайну с SOLID-принципами, четко разработь с event loop и прочим… Все какая-то портянка из 100500 глобальных def’ов вижу, в основном, в проектах. Да и вроде… Компании - солидные и платят этим Питонисам 250+ рублей в месяц. А стиль написания такой, за который могли бы уволить джуна в 2010ом, если речь шла про другой стэк (C#, Java).

Вопрос: от чего же в новых питоновских проектах на живой практике многие разработчики не пытаются применить фичи из последней версии языка, и приблизиться к дизайну/стилю кода, как на Java. И вообще, все сделать по канону чистенько, соблюдая SOLID. При наличии уже таких возможностей.

Это лень и нежелание просто? Или есть объективные причины забить болт на все это, и далее оформлять спагетти-код километровый?

P.S. не удтверждаю, что я - прав. Возможно, я совсем не прав. Я просто реально не понимаю, почему качество Питон-проектов, как было примерно таким 10 лет назад, то таким и осталось… Адепты на других языках, как-то более лучше развиваются в плане чистоты своих проектов. Опять сугубо моё ИМХО.

Ответ на: комментарий от eternal_sorrow

но питон же это и есть ооп, только нет объекта верхнего уровня свойствами которого были бы все объявленные объекты как в js или ruby:

➜ node -e "function foo(){}; console.log(this.foo)"               
[Function: foo]
tz4678 ★★
()
Ответ на: комментарий от tz4678

но питон же это и есть ооп

необязательно. питон - мультипарадигменный язык. он позволяет писать как ООП, так и в процедурном или функциональном стиле и сочетать эти вещи так как хочется

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

нет объекта верхнего уровня свойствами которого были бы все объявленные объекты как в js или ruby

locals()

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

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

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

man property (и в целом дескрипторы)

Не инкапсуляция, но ровно то, что нужно.

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

Это не инкапсуляция, это переименование. Почитай как работает. Доступ сохраняется, просто добавляется префикс к названию и всё.

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

Раньше вроде писал про защищенное свойство, а про то что до него добраться можно я и так знал.

Python 3.10.0 (default, Oct  7 2021, 07:41:25) [GCC 11.1.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> class Foo:
...   __protected = 42
... 
>>> Foo().__protected
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Foo' object has no attribute '__protected'. Did you mean: '_Foo__protected'?
>>> Foo()._Foo__protected
42

Но в этих языках с псевоинкапсуляцией без котрой якобы нельзя жить тоже можно через Reflector до приватных членов (гыгы) добраться

tz4678 ★★
()
Ответ на: комментарий от tz4678
>>> class Foo:
...   def __init__(self):
...     self.__prop = 42
... 
>>> Foo().__prop
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Foo' object has no attribute '__prop'
>>> Foo()._Foo__prop
42
tz4678 ★★
()
Ответ на: комментарий от tz4678

Насколько это дешево и бездарно… И ты, мальчик, еще что-то вякал на Java? :) Мда… Пойду лучше винца попью.

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

Можно упороться и упихать значение в стейт дескриптора. Не говорю, что это корректно, но так похитрее будет.

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

Инкапсуляция - в голове пишущего. В C++ и pascal она вроде как есть в языке, но все пацаны знают как обойти.

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