Получи случайную криптовалюту за регистрацию!

Переходник Python Universe

Логотип телеграм канала @the_python_universe — Переходник Python Universe П
Логотип телеграм канала @the_python_universe — Переходник Python Universe
Адрес канала: @the_python_universe
Категории: Технологии , Образование
Язык: Русский
Количество подписчиков: 13
Описание канала:

🐍The Python Universe — просто о сложном.
По всем вопросам:
🔸 @murman12
🔹 @Himmel404

Рейтинги и Отзывы

3.67

3 отзыва

Оценить канал the_python_universe и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

1

4 звезд

1

3 звезд

0

2 звезд

1

1 звезд

0


Последние сообщения

2022-08-31 21:40:01 Атрибуты класса и локальные атрибуты их экземпляров

Введение в ООП

Определим класс Point:

class Point:
    '''Класс для представления координат точек на плоскости'''

    color = 'red'
    circle = 2

Класс образует пространство имен, где находятся два атрибута color и circle.

Изменим значение атрибута color и обратимся к нему:

>>> Point.color = 'black'
>>> Point.color

'black'

Используем __dict__, чтобы увидеть все атрибуты класса:

print(Point.dict)

{'module': 'main', 'doc': 'Класс для представления координат точек на плоскости', 'color': 'black', 'circle': 2, 'dict': , 'weakref': }

Создадим 2 экземпляра класса и сравним:

>>> x = Point()
>>> y = Point()

>>> type(x)

__main__.Point

Имя класса выступает в качестве типа данных, экземпляры x и y образуют свое пространство имен, но не содержат собственных атрибутов. Свойства color и circle принадлежат классу Point, а объекты x и y лишь ссылаются на атрибуты класса, поэтому атрибуты класса – общие для всех его экземпляров.

Изменим свойство circle:

>>> Point.circle = 1
>>> x.circle, y.circle

(1, 1)

Если применить _ _dict_ _ к обьектам, то словарь будет пуст, т.к в экземплярах отсутствуют атрибуты, но обращаться к ним можно.

>>> x.__dict__

{}

Выполним присваивание иначе:

>>> x.circle = 0
>>> x.circle, y.circle

(0, 1)

>>> x.__dict__

{'circle': 0}

Атрибут изменился только у экземпляра x, т.к идет обращение к пространству имен экземпляра класса и оператор присваивания создает/заменяет атрибут circle в объекте x. То есть, создалось локальное свойство в объекте x.

@The_Python_Universe #ООП
686 viewsedited  18:40
Открыть/Комментировать
2022-08-30 21:46:21
Что выведет код выше?
Anonymous Quiz
20%
['0', '1', '2', '3', '4']
17%
['0', '1', '2', '34']
6%
['012', '3', '4']
30%
['012', '34']
5%
['01234']
3%
'012''34'
4%
'01234'
16%
TypeError
443 voters682 views18:46
Открыть/Комментировать
2022-08-30 21:46:20
@The_Python_Universe #Тест
682 views18:46
Открыть/Комментировать
2022-08-30 17:59:58
Что выведет код выше?
Anonymous Quiz
2%
[0, 1, 2]
2%
[0, 1, 2, 3]
25%
[0, 1, 2, 4, 5]
47%
[0, 1, 2, [4, 5]]
6%
[0, 1, 2, 3, 4, 5]
6%
[0, 1, 2, 3, [4, 5]]
2%
NameError
5%
TypeError
5%
SyntaxError
634 voters1.1K views14:59
Открыть/Комментировать
2022-08-30 17:59:56
@The_Python_Universe #Тест
1.0K views14:59
Открыть/Комментировать
2022-08-29 13:44:20 dict() vs {}:

Пустой словарь можно создать разными способами, но одинаковы ли они?

На деле это не так. Они приводят к генерации разного байт-кода. Разобраться во всем поможет ранее разобранный модуль dis:

Про дизассемблирование кода

>>> import dis
>>> dis.dis('{}')

1 0 BUILD_MAP 0
2 RETURN_VALUE

>>> dis.dis('dict()')

1 0 LOAD_NAME 0 (dict)
2 CALL_FUNCTION 0
4 RETURN_VALUE

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

Очевидно, что это влияет на время выполнения кода:

>>> from timeit import timeit
>>> timeit('{}')

0.01877254199644085

>>> timeit('dict()')

0.04062337501090951

dict() работает в 2 раза медленее, чем {}. Не призываю переписывать старый код, просто на заметку.

Документация dis

@The_Python_Universe #dis
3.9K views10:44
Открыть/Комментировать
2022-08-28 13:55:57
Что выведет код выше?
Anonymous Quiz
22%
[1]
3%
[0]
24%
[0, 1]
1%
[1, 0]
51%
Error
1.6K voters4.1K views10:55
Открыть/Комментировать
2022-08-28 13:55:56
@The_Python_Universe #Тест
3.8K views10:55
Открыть/Комментировать
2022-08-27 21:42:56
Что выведет код выше?
Anonymous Quiz
7%
python
9%
py_hon
54%
pyt_on
2%
pyth_n
1%
pytho_
27%
Error
1.3K voters3.1K views18:42
Открыть/Комментировать
2022-08-27 21:42:54
@The_Python_Universe #Тест
2.6K views18:42
Открыть/Комментировать