Во всех версиях Python 3 функциональные объекты лениво создают словарь аннотаций. если для этого объекта не определены аннотации. Вы можете удалить атрибут __annotations__, используя del fn.__annotations__, но если вы затем получите доступ к fn.__annotations__, объект создаст новый пустой словарь, который он сохранит и вернет в качестве своих аннотаций. Удаление аннотаций функции до того, как она лениво создаст свой словарь аннотаций, вызовет ошибку AttributeError; использование del fn.__annotations__ дважды подряд гарантированно всегда выдает ошибку AttributeError.
Я не знаю Не совсем понял последнее предложение. Я никак не могу вызвать AttributeError.
Если вы спросите меня, зачем мне это нужно, я не сделаю этого. Я спрашиваю просто потому, что после прочтения этого абзаца я не смог воспроизвести это исключение.
Код: Выделить всё
>>> def fn1(a, b):
... return a + b
...
>>> del fn1.__annotations__
>>> del fn1.__annotations__
>>> del fn1.__annotations__
>>>
>>> def fn2(a: str, b: int) -> str:
... return a * b
...
>>> del fn2.__annotations__
>>> del fn2.__annotations__
>>> del fn2.__annotations__
Подробнее здесь: https://stackoverflow.com/questions/766 ... -attribute