Size: a a a

2017 September 26

А

Адиль in Python KZ
Вопрос не по теме. Какая курьерская служба самая норм для интернет магазина с наложенным платежом?
источник

М

Максим in Python KZ
Зацени postexpress
источник

YB

Yevgeniy Bondarev in Python KZ
Максим
В качестве интерфейсов можно использовать абстрактные классы + docstring + вышеупомянутый typing
Про абстрактные классы не знал, спасибо! ))) будем писать на Python как на Java  теперь, хд
источник

YB

Yevgeniy Bondarev in Python KZ
Да и вообще модуль abc четенький
источник

YB

Yevgeniy Bondarev in Python KZ

from abc import ABCMeta, abstractmethod, abstractproperty
class Movable():
   __metaclass__=ABCMeta

   @abstractmethod
   def move():
   """Переместить объект"""
   
   @abstractproperty
   def speed():
   """Скорость объекта"""

Тема
источник

YB

Yevgeniy Bondarev in Python KZ
Спасибо еще раз
источник
2017 September 27

A

Azamat in Python KZ
@KanViner

В целом в питоне интерфейсы в стиле джавы используются очень редко.

Питон нарочно намного "гибче" джавы: принцип EAFP (https://docs.python.org/3/glossary.html#term-eafpn), повсеместно используется duck typing (https://docs.python.org/3/glossary.html#term-duck-typing)

Интефейсом класса являются методы в его определении. Т.е. ты  точно так же продумываешь вход \ выход, потом пишешь методы, документацию и тесты (или сперва тесты). Далее ты просто предполагаешь что тебе передают правильные объекты. Если нет - полетят эксепшны и это нормально.

ABC обычно используется именно для наследования, когда у тебя несколько классов со схожими методами. Как альтернатива объявляют обычный класс и методы поднимают NotImplementedError (https://docs.python.org/3/library/exceptions.html#exceptions.NotImplementedError).

Разница между первым и вторым:

1) Нельзя создать объект ABC класса - вылетит эксепшн. У второго создать объект можно, эксепшн только при вызове метода.
2) Если наследующий класс не определяет все методы базового абстрактного, вылетит эксепшн при создании объекта.
3) ABC используют чтобы переопределить isinstance и issubclass
источник

YB

Yevgeniy Bondarev in Python KZ
@X3gxu
Спасибо за ответ!
EAFP как-то не очень с первого впечатления. К регрессионым ошибкам приводит наверное такой метод. Чем раньше отловил ошибку, тем легче понять причину.
Попробую все три подхода (abc, NotImpl.., EAFP)
источник
2017 September 28

hx

https://github.com/Rustem xepa4ep in Python KZ
Yevgeniy Bondarev
Можно вопросы опытным питонистам?

Я с коллегами, за последние несколько месяцев, сделали три не очень сложных проекта на Django. Бэкэнд кода не много, все классненько и быстро написалось, влюбился в язык почти сразу.
За плечами полтора года на Java. Командная разработка там ведется следующим образом:
Разработчики декомпозируют проект на как можно более автономные составляющие. Для каждой части на раннем этапе разработки придумывается API, вход/выход, и строго формализуется в интерфейсах. Каждый разработчик знает что его модуль должен принять и что отдать. Если еще DI/IOC подключить, то зависимость модулей друг от друга можно свести на нет. В итоге приложение одновременно может писать несколько десятков разработчиков, не особо синхронизируюясь с действиями друг друга. Таким образом можно написать приложение любой сложности.

Теперь по Python:

С помощью чего в Python формализуется вход/выход модуля? Интерфейсов ведь нет. С помощью каких инструментов разные модули собираются в готовое приложение (например в Java это Spring)? Есть ли у кого-нибудь опыт написания крупных приложений на Python?

Пока что пишу очень подробные документации, ведь без них мой код это просто набор переменных неизвестно что хранящих, которые вызывают друг у друга какие-то методы и не известно что возвращают. Представляю как через два года приходит разработчик новый, смотрит на метод, а там
return house_note
. И вот думай потом что это за
house_note
и что с ней делать.
Использую abc больше года. Однако из за рядо особенностей, сейчас Переводим проект на Python 3
источник

hx

https://github.com/Rustem xepa4ep in Python KZ
https://github.com/Rustem xepa4ep
Использую abc больше года. Однако из за рядо особенностей, сейчас Переводим проект на Python 3
Если используйте pycharm + abc и документируйте код на лету генерит описание методов и зависимости более четкие
источник

hx

https://github.com/Rustem xepa4ep in Python KZ
Ещё есть Zope интерфейсы - можете на pyramid глянуть
источник

YB

Yevgeniy Bondarev in Python KZ
https://github.com/Rustem xepa4ep
Использую abc больше года. Однако из за рядо особенностей, сейчас Переводим проект на Python 3
А что с Python3 ? В контексте abc
источник

YB

Yevgeniy Bondarev in Python KZ
https://github.com/Rustem xepa4ep
Если используйте pycharm + abc и документируйте код на лету генерит описание методов и зависимости более четкие
У меня сложилось впечатление что Pycharm "учится" во время работы приложения. Просто бывает ставлю точку после переменной, и нет предложений. А потом по-дебажу по-запускаю, и Pycharm начинает предлагать специфичные методы
источник

hx

https://github.com/Rustem xepa4ep in Python KZ
Yevgeniy Bondarev
А что с Python3 ? В контексте abc
Нет . Много текста обрабатываем. Заметно прибавил он как раз в работе с текстами
источник

hx

https://github.com/Rustem xepa4ep in Python KZ
https://github.com/Rustem xepa4ep
Нет . Много текста обрабатываем. Заметно прибавил он как раз в работе с текстами
Чиним сломанный уникод , Парсим разные файлы на 15-20 проц быстрее. Для нас того стоит .
источник

hx

https://github.com/Rustem xepa4ep in Python KZ
Yevgeniy Bondarev
У меня сложилось впечатление что Pycharm "учится" во время работы приложения. Просто бывает ставлю точку после переменной, и нет предложений. А потом по-дебажу по-запускаю, и Pycharm начинает предлагать специфичные методы
Да. Учится
источник

hx

https://github.com/Rustem xepa4ep in Python KZ
https://github.com/Rustem xepa4ep
Да. Учится
И ещё этот счётчик countdown
источник

hx

https://github.com/Rustem xepa4ep in Python KZ
источник

hx

https://github.com/Rustem xepa4ep in Python KZ
;)
источник
2017 September 29

N

Nfmka in Python KZ
Немного о том, что у нас кодится на Python + Go + Node.js
источник