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

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    @dataclass(slots=True)
    class Govno:
        govno_index: int
        
        def patch(self, indices_dict: Dict[int, int]) -> None:
            new_index = indices_dict[self.govno_index]
            self.govno_index = new_index
    
    
    @dataclass(slots=True)
    class Mocha:
        mocha_index: int
        
        def patch(self, indices_dict: Dict[int, int]) -> None:
            new_index = indices_dict[self.govno_index]
            self.govno_index = new_index

    Метод «patch» был скопипащен из класса «Govno» в класс «Mocha». Тайпчекер никаких ошибок не показывал; все типы были выведены корректно.

    А в рантайме всё упало, что и неудивительно!

    Запостил: ISO, 13 Июня 2023

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

    • Какой тайпчекер )))
      Ответить
    • Кстати, в php можно у класса определить магические методы __set и __get, тогда можно будет обращаться к несуществующим полям класса без падения программы.
      Ответить
      • Именно поэтому я за "PHP".
        Ответить
      • кстати, в питоне тоже есть слоты. а в руби method_missing
        Ответить
        • Слоты «Питона» — это перечисление полей, которые могут быть присвоены у объектов данного класса.
          По-умолчанию объекту можно насрать в произвольный атрибут: «obj.foo = 42» эквивалентно (с оговорками и в отсутствии перегрузки __getattribute__) «obj.__dict__['foo'] = 42».
          Слоты позволяют жёстко зафиксировать возможные атрибуты объекта на этапе описания класса, тем самым:
          1) Запретить присваивание любым другим атрибутам, кроме перечисленных в кортеже __slots__ класса;
          2) Уменьшить занимаемую объектами память (для «слотовых» объектов не создаётся словарь __dict__ с соответствующим оверхедом);
          3) Увеличить скорость доступа к атрибутам объекта, причём значительно (вместо поиска в словаре по названию ключа происходит быстрое разрешение по номеру слота).
          Ответить
          • тогда наверное речь о getattr или getattribute *я их путаю*
            Ответить
            • Загадка для внимательного питуха, кстати


              Назовите статически типизированный, компилируемый в нативный код язык, в котором можно вызвать несуществующий метод и не упасть
              Ответить
              • > статистически типизированный
                Я такой называю несуществующим, если там можно несуществующий символ привести к функции, а потом еще и вызвать.
                Ответить
            • Ты прав, «__getattr__».
              Запомнить очень легко: «__getattr__» короче, поэтому в него попадает меньше вызовов (только те ключи, которые не нашлись в объекте), а «__getattribute__» длиннее, поэтому ловит все обращения к атрибутам.
              Ответить
              • Мне пужулуста ещё 03 таких мнемоник для copy, copy2 и copyfile.
                Ответить
                • Кстати, в POSIX есть функции dup и dup2, но есть еще и линукс-специфичная функция dup3
                  Ответить
                • The shutil module offers a number of high-level operations on files and collections of files. In particular, functions are provided which support file copying and removal. For operations on individual files, see also the os module.

                  Warning Even the higher-level file copying functions (shutil.copy(), shutil.copy2()) cannot copy all file metadata.
                  On POSIX platforms, this means that file owner and group are lost as well as ACLs.


                  блядь
                  Ответить
                • А вообще держи:

                  shutil.copyfileobj(fsrc, fdst[, length])
                  Copy the contents of the file-like object fsrc to the file-like object fdst. The integer length, if given, is the buffer size. In particular, a negative length value means to copy the data without looping over the source data in chunks; by default the data is read in chunks to avoid uncontrolled memory consumption. Note that if the current file position of the fsrc object is not 0, only the contents from the current file position to the end of the file will be copied.
                  Ответить
    • Именно поэтому я за языки со стат типизацией
      До речи, пайшарм прекрасно это хендлит
      https://i.postimg.cc/VLh1DzMC/image.png

      Пользуйтесь нормальными инструментами
      Ответить
      • > Пользуйтесь нормальными инструментами

        Поддерживаю. «Питон» не нужен.
        Ответить
      • Тормозное жабаговно от житбрейнс не является "нормальным инструментом"
        Ответить
        • > Тормозное жабаговно
          А е-клипса от других деятелей?
          Ответить
          • да

            Эклипс такое же тормозное говно как и JB, просто еще и нихуя не умеет без сорока девяти плагинов
            Ответить
          • Тоже говно. Писать "IDE" на жабе это хреновая идея.
            Ответить
            • Я бы сказал, что писать на Java вообще сомнительная идея. Но если писать глубоко асинхронные сервера приложений еще можно, то писать интерактивное говно типа текстовых редакторов на JVM не нужно.
              Ответить
            • Я могу их по-ня-ть, им хотелось писать на жабе посреди жабы, поэтому они добавили жабу в свою жабу.
              Ответить
              • Тогда почему б им не переписать "PyCharm" на "Python", "PhpStorm" на "PHP", "RubyMine" на "Ruby", "Clion" на "C++", "WebStorm" на "JavaScript", "Rider" на "C#", "Goland" на "Go", "AppCode" на "Swift"?
                Ответить
                • Опровергаю. Райдер и так солидной частью на шарпе.
                  Ответить
                • На питоне уже есть IDE, называется IDLE.
                  Ответить
                • Джавушки смогли. Так это вижу.
                  Ответить
                • AppCode всё, кстати

                  И кстати если бы они написали всё на С++, то оно летало бы
                  Ответить
                • Потому что это одно и то же говно, только с разными иконками.
                  Ответить
        • Ну лови тогда бубарехи в рантайме:)

          Другой вопрос, что питухон не нужен (как правильно и сказал Файк): подобной проблемы в нормальном ЯП бы не случилось
          Ответить
          • > Ну лови тогда бубарехи в рантайме:)

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

            > Другой вопрос, что питухон не нужен (как правильно и сказал Файк)

            С этим я не спорю
            Ответить
            • Статические анализаторы не очень хорошо умеют инкрементально анализировать недописанный код. Но сама идея выноса их в отдельный сервер мне нравится
              Ответить
              • Я еще раз хочу заметить, что если в 1998м году идея единого языка под все платформы со сборкой мусора и ABI могла быть привлекательна (ну просто вспомните плюсы без смарт поинтеров например, без тредов, без вообще какой либо кроссплатформенности) то в 2023 джава объективно становится ненужна для большинства задач.
                Ответить
        • Раньше кстати автокомплит реально работал как автокомплит. Сейчас блядь надо ждать, пока он начнет что-то подсказывать, и самое важное он загрузит последним. Поэтому ты вбиваешь List, а java.util.List он выведет последним, и курсор туда не перебросит.
          Ответить
      • Помнится, у «PyCharm» была до невозможности хуёвая поддержка чего-то нужного — то ли дженериков, то ли протоколов, не помню уже. Именно поэтому я за «mypy».
        Ответить
      • Кстати, а если убрать чтение govno_index и «slots=True» — он уберёт предупреждение на записи govno_index?
        Ответить
    • My PC isn't working well recently, so i used the sfc /scannow command on command prompt. But it just got this error "Windows Resource Protection could not perform the requested operation." Any help is appreciated about this
      Ответить

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