1. Python / Говнокод #26823

    0

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    def __init__(self, text: str, description: str, category_id: int, auth_cookie: str) -> None:
        Form.__init__(self)
        CsrfForm.__init__(self)
        CaptchaForm.__init__(self)
        self.text: str = text
        self.description: str = description
        self.category_id = category_id
        self.auth_cookie = auth_cookie

    Какое наследование )))

    Запостил: gost, 28 Июля 2020

    Комментарии (29) RSS

    • показать все, что скрытоvanished
      Ответить
      • > где-то пишем тип, где-то не пишем...
        Это неявная типизация же, тип выводится из типа аргумента коньструктора. Хотя с text и description проёб, да.

        Ну, знаешь, как сначала делают везде обязательные явные типы, лет десять-двадцать их кушают, а потом изобретают var/let/val/auto.
        Правда, я гаедлайны по питоновской типизации не читал, так что хз.
        Ответить
        • >проёб
          угу. Но у тебя еще не самый адский вариант, я видал код, где часть параметров даже не выводится.

          А у тебя VSCode умеет эти аннотации парсить, и делать кодинсайт? Пайшарм вот умеет.

          Вывод типов это всё таки другое: там статическая типизация обязательна, просто ее можно посчитать. А в питоне ж нет.

          >гаедлайны
          Хуй знает, где есть такие. Я бы почитал. Пока что кажется, что в публичном API лучше всегда указывать типы, а в скриптушне для себя -- нет
          Ответить
          • > А у тебя VSCode умеет эти аннотации парсить, и делать кодинсайт?
            Разумеется, там и официальные расширения (от «Майкрософта») для этого есть, и ещё куча разных. Я использую стандартный «mypy», он довольно качественно работает. «Pyright» не понравился, какие-то траблы были, а вот сейчас активно развивается «Pylance» — надо бы глянуть как-нибудь.

            > а в скриптушне для себя -- нет
            Я и в скриптушне добавляю. Периодически отлавливаю разные глупые очепятки. А вообще стараюсь делать так, чтобы у каждой пельменной «mypy» хотя бы выводил тип.
            Ответить
            • И как там с комплишеном? Умеет ли восстанавливаться парсер, или при одной синтаксической ошибке все красное?
              Мне просто сказалось, что mypy делался не для ide, а для валидации кода потом, как линтер

              >Я и в скриптушне добавляю.
              Может, пора на typescript?
              Ответить
              • Да всё более-менее заебись, ошибки подчёркивает, «IntelliSense»/«IntelliCode» работают.

                > Мне просто сказалось, что mypy делался не для ide, а для валидации кода потом, как линтер
                Ну, ЕМНИП, оно так и есть, только в «VSCode» его прикрутили динамически.

                > Может, пора на typescript?
                Не, воздержусь.
                Ответить
                • ну у тебя нету ощущения, что вместо натягивания тупизации на питухона, лучше бы сразу взять статически тупизированый изык?
                  Ответить
                  • Мне не нравится, что «TypeScript» нужно конпелировать. Я путуха использую для максимально простого, кхм, деплоя в виде загрузки файликов на сервер по «FTP». Когда мне нужен мощный компилируемый статически типизированный язык — я беру «C++».
                    Ответить
                    • показать все, что скрытоvanished
                      Ответить
                      • Потому что я их загружаю по «SFTP».
                        А если серьёзно, то у путуха чуть более сложный деплой: надо «gunicorn» ставить, юниты создавать, все дела.
                        Ответить
                        • Я не понял, причем тут язык.

                          Ты можешь использовать mod_python, и будет тоже самое что и с пыхокалом.

                          А если в пыхокале ты будешь использовать fcgi_fpm то его тоже надо ставить, и юниты создавать
                          Ответить
                          • показать все, что скрытоvanished
                            Ответить
                          • > mod_python
                            Любопытно, не слышал про такое извращение.

                            > Я не понял, причем тут язык.
                            Скорее, не язык, а сложившаяся практика его применения.
                            Ответить
                            • Оно вполне себе существует на каких-то шаредах, и работает примерно как и в пыхе: интерпретатор питона загружается в адресное простраство апача и там работает
                              Есть еще mod_wsgi, кажется он депрейетнул mod_python.

                              >практика
                              Это правда

                              Хотя про запуск пыха в отдельном процессе и связывании его по fast cgi даже Конардо говорил
                              Ответить
                        • показать все, что скрытоvanished
                          Ответить
                    • Понятно. Ну, деплой же обычно всё равно автоматизирован: миграции накатить, статику пересобрать клиенсткую, локализацию, вот это всё.

                      Правда, это в больших проектах конечно

                      >я беру «C++».
                      ты сравнил) есть же всякие золотые середины типа kotlin, правда нужно жвм иметь
                      Ответить
                      • > Правда, это в больших проектах конечно
                        Подтверждаю. Для мелких проектов вроде «NGK» это несколько излишне (хотя наш инженерный отдел уже давно хочет прикрутить эту тему, хотя бы для общего развития). А сейчас наши путухоновские проекты деплоятся как в этой статье: https://habr.com/post/512550/ (только без шкриптов и ЙАЖИ).
                        Ответить
                        • У меня один петпроджект деплоится как раз шел скриптом на сервере, который делает git pull, накатывает миграции, собирает статику и локализацию, и перезапускает gunicorn.

                          А в другом петпроекте делается тоже самое, но удаленно: там используется fabric, и запускать его нужно на своей машине, по историческим причинам.
                          Ответить
        • > Ну, знаешь, как сначала делают везде обязательные явные типы, лет десять-двадцать их кушают, а потом изобретают var/let/val/auto.

          Ага. А потом засирают этими var/let/val/auto код настолько, что чтобы его понять, приходится вводить обязательные гайдлайны на уровне проекта, где описывать кейсы, когда эти самые var/let/val/auto нужно применять, а когда — лучше написать просто int.
          Ответить
          • …и колесо делает оборот.
            Ответить
          • Пишешь код в блокноте что ли? Или тринадцать замыканий одно в другом?
            Ответить
            • > пишешь код в блокноте

              Читаешь ревью в браузере. Грузить ветку в IDE то не особо удобно.
              Ответить
              • Ок. Приведи, пожалуйста, какой-то пример, когда отсутствие аннотации типа реально затрудняет ревью.
                Ответить
                • Мне самому в голову пришёл пример лол

                  let value = getSomeCounterWhatever()
                  
                  // Без поллитра не разобраться, signed тут или unsigned
                  let doubleValue = value * 2


                  Я забыл, что сишники и крестовики скилловые и думают про переполнения
                  Ответить
                • Да банально когда функция вернула число и хочется понять какого оно типа. А там ехал авто через авто.

                  С более сложными типами обычно всё более-менее очевидно по имени функции или по полям которые оттуда достают. Но если там несколько похожих типов - приходится лезть в описание опять же.

                  З.Ы. Ну и если первый раз этот код видишь и с типами которые там юзаются ещё не знаком, auto сильно затрудняет понимание.
                  Ответить
              • показать все, что скрытоvanished
                Ответить
          • показать все, что скрытоvanished
            Ответить

    Добавить комментарий