Telegram Web
🔍 Что выведет код?
Anonymous Quiz
66%
300 400
19%
100 400
5%
100 200
9%
Error
1. В классе P (родительский класс):
- self.__x = 100 - создается приватный атрибут __x со значением 100
- self.y = 200 - создается публичный атрибут y со значением 200

2. В классе C (дочерний класс):
- super().__init__() - вызывается конструктор родительского класса
- self.__x = 300 - создается НОВЫЙ приватный атрибут __x со значением 300
- self.y = 400 - переопределяется значение публичного атрибута y

Ключевой момент здесь в том, что в Python приватные атрибуты (с двойным подчеркиванием __) автоматически «манглируются» (переименовываются) интерпретатором. Когда мы создаем приватный атрибут __x в классе P, он фактически становится _P__x, а когда создаем __x в классе C, он становится _C__x.

Поэтому:
1. Когда вызывается d.print(), метод print из класса P обращается к self.__x, что на самом деле означает self._P__x, поэтому выводится 100
2. Атрибут y является публичным, поэтому его значение успешно переопределяется в классе C на 400

Таким образом, в выводе мы видим:
- 100 (значение _P__x из родительского класса)
- 400 (значение y из дочернего класса)

Это демонстрирует важное различие между приватными и публичными атрибутами в Python при наследовании.
🔍 Что выведет код?
Anonymous Quiz
11%
1
5%
2
18%
3
66%
4
Код выводит "131211131211" и затем вызывает ошибку IndexError.

rev_func() — рекурсивная функция, но она не имеет условия выхода (базового случая):

1. Начальный вызов: rev_func(x, 3)
- x = [11, 12, 13]
- length = 3
- Выводит x[2] = 13

2. Рекурсивный вызов: rev_func(x, 2)
- Выводит x[1] = 12

3. Рекурсивный вызов: rev_func(x, 1)
- Выводит x[0] = 11

4. Рекурсивный вызов: rev_func(x, 0)
- Пытается вывести x[-1], что приводит к IndexError

Функция продолжает вызывать сама себя, уменьшая length, пока не достигает отрицательного значения, что приводит к попытке доступа к несуществующему индексу списка (т. е. IndexError).
Выберите стандартный метод Python для записи данных в бинарном режиме:
Anonymous Quiz
57%
write
14%
Output.binary
14%
Dump
15%
Binary.output
write - это стандартный метод для записи данных в файл. Он может работать с бинарными данными, если файл открыт в бинарном режиме ('wb').

Остальные варианты неверны:
- Output.binary - такого метода нет в стандартной библиотеке Python
- Dump - это не стандартный метод Python для записи данных
- Binary.output - такого метода нет в стандартной библиотеке Python

Пример правильного использования write для бинарной записи:

with open('file.bin', 'wb') as f:
f.write(binary_data)
🌱 Что выведет код?
Anonymous Quiz
17%
[1, 2, 3]
77%
[1, 2, 3, 4]
4%
[4, 1, 2, 3]
2%
Error
Списки являются изменяемыми объектами, и при присваивании b = a создается ссылка на тот же список, а не его копия. Поэтому при изменении списка b через метод append(), изменения также отражаются в списке a, так как они указывают на один и тот же объект в памяти.
🔍 Что выведет код?
Anonymous Quiz
14%
a
73%
b
6%
ab
7%
Error
Код выведет "b" из-за принципа работы областей видимости LEGB и использования ключевого слова global:

1. Сначала определяется глобальная переменная x со значением "a":
x = "a"

2. Затем определяется функция outer_func(), которая объявляет x как глобальную переменную с помощью ключевого слова global:

def outer_func():
global x

3. Внутри outer_func() определяется вложенная функция nested_func(), которая просто выводит значение x:

def nested_func():
print(x)

4. После определения функций, значение глобальной переменной x изменяется на "b":
x = "b"

Благодаря объявлению global x внутри outer_func(), все обращения к x внутри этой функции (включая вложенные функции) будут ссылаться на глобальную переменную x. Когда nested_func() вызывается и пытается вывести x, она ищет значение x в следующем порядке (LEGB):
— L (Local): локальной переменной x нет;
— E (Enclosing): из-за global x в outer_func, пропускается;
— G (Global): находит x со значением "b";
— B (Built-in): не требуется.
Классы всегда вкладываются внутрь модуля. Классы и модули являются пространствами имен, но классы соответствуют операторам (не целым файлам) и поддерживают такие понятия ООП, как множество экземпляров, наследование и перегрузку операций (все перечисленное модули не поддерживают). До известной степени модуль подобен классу с единственным экземпляром без наследования, который соответствует полному файлу кода.
🌱 Какие из способов создания атрибута класса являются правильными?
Anonymous Quiz
23%
1
16%
2
5%
3
55%
Все верные
Объяснение: Все три способа являются корректными, но создают разные типы атрибутов:
- attr1 - это атрибут класса, доступный всем экземплярам
- attr2 - это атрибут экземпляра, уникальный для каждого объекта
- attr3 - это атрибут класса, добавленный после определения класса
2025/06/18 20:37:07
Back to Top
HTML Embed Code: