• Почему при обращении к @classmethod возникает NameError: name 'cls' is not defined?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    cls и self - это никакие не префиксы, а обычные перемнные. Они поступают в виде первого аргумента метода.
    Вы даже назвать их можете по-другому и ничего не поломается.
    Попробуйте, всё-таки, почитать книжку по питону по порядку, а не действовать методом тыка и не гадать на кофейной гуще.
    В функции zas у вас нет переменной cls, отсюда и NameError.
    Получить класс объекта можно с помощью функции type: type(self).infield()

    Ну и да, судя по всему, вы не поняли до конца для чего нужны классовые методы, а для чего обычные.
    Ктсати, Test().zas() отработает вполне корректно, не смотря на то, что это классовый метод, а вызывается он у инстанса. Просто классовому методу будет передан в аргумент класс, а не инстанс.

    Серёьзно. Бросайте пытаться разбираться в этом методом тыка и вопросов на QnA. Там дальше наследование, полиморфизм, множественное наследование, метаклассы... Вы всех задолбаете и будете этим заниматься целую вечность
    Ответ написан
    1 комментарий
  • Почему файл открыл с with as и не удаляется?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Видать не очень хорошие у вас источники. Оператор with просто оборачивает блок кода контекстным менеджером. Функция open - это контекстный менеджер, который открывает файл при входе в блок with и закрывает при выходе. Могут быть и другие контекстные менеджеры, которые вообще не имеют отношения к работе с файлами. Или выполняют свои обязанности не полностью, как ваш.
    Ответ написан
    1 комментарий
  • Почему при использовании with open не добавляются в сравнение отрицательные числа?

    Vindicar
    @Vindicar
    RTFM!
    Ну во-первых, почему вначале read(1)? Это читает один символ, а не одну строку, так что если у тебя более 10 чисел в файле, работать будет некорректно.
    Во-вторых, isdigit() проверяет, что строка содержит только цифры. Знак "-" цифрой не является. Поэтому твой код такие строки игнорирует.
    Ответ написан
    3 комментария
  • Как поправить TypeError: 'int' object is not subscriptable, который появляется при принте элемента списка в полном цикле?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Вы вместо последовательности передаёте в функцию целое число, либо последовательность меньшей размерности, чем ожидается.
    Ответ написан
    Комментировать
  • Почему .append() добавляет неизмененные данные?

    Vindicar
    @Vindicar
    RTFM!
    nun[1]+=i
    possible.append(nun)
    nun[1]-=i

    Это не будет работать, так как append() добавляет ссылку на список, а не его копию.
    Попробуй выполнить вот такой код в отдельном файле и убедись
    b = []
    a = [1, 2, 3]
    b.append(a)
    b.append(a.copy())
    a.append(5)
    print(b)  # выведет [[1, 2, 3, 5], [1, 2, 3]]
    print(b[0] is a)  # выведет True, так как 0 элемент b - ссылка на a
    print(b[1] is a)  # выведет False, так как 1 элемент b - ссылка на отдельный список
    Ответ написан
    Комментировать