База Hintsage

Модель данных

Протоколы объектов, dunder-методы, дескрипторы и классы.

Практика

Вопросы: Модель данных

Разберите механизм доступа к атрибуту: какое значение напечатает код и почему запись в __dict__ не меняет результат?

class D:
    def __get__(self, obj, owner):
        return 'descriptor'

    def __set__(self, obj, value):
        raise AttributeError('read only')

class C:
    x = D()

c = C()
c.__dict__['x'] = 'instance'
print(c.x)
Программирование PythonМодель данныхРазработчик Python среднего уровня

Вам передали контекстный менеджер. Определите, дойдёт ли ValueError до обработчика и что напечатает программа.

class CM:
    def __enter__(self):
        print("enter")
        return self

    def __exit__(self, exc_type, exc, tb):
        print(exc_type.__name__)
        return True

try:
    with CM():
        print("body")
        raise ValueError("bad")
except ValueError:
    print("propagated")
else:
    print("handled")

Показано 1–20 из 50