Почему вы можете перегрузить getattr для typing.Dict, но не для typing_extensions.TypedDict?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему вы можете перегрузить getattr для typing.Dict, но не для typing_extensions.TypedDict?

Сообщение Anonymous »

Я использую Python 3.10 и перешел с Dict на TypedDict для аннотаций. Следуя совету Пепа 655, я импортирую из typing_extensions вместо ввода; Мне также нужен NotRequired, который в этой версии можно импортировать только из typing_extensions.
Я заметил, что могу перегрузить __getattr__ (и __getattribute__) для Dict, OrderedDict и даже typing.TypedDict просто отлично, но он игнорируется для typing_extensions.TypedDict дети. Почему это происходит и есть ли способ обойти это?
Пример:

Код: Выделить всё

from typing_extension import TypedDict
from typing import Dict, TypedDict as TypedDict2

class PerfectlyFineDict(Dict):
def __getattr__(self, key): return self[key]
class PerfectlyFineDict2(TypedDict2):
def __getattr__(self, key): return self[key]

f = PerfectlyFineDict(a=1)
print(f['a']) # Of course, prints "1"
print(f.a) # Works perfectly fine - prints "1"

f = PerfectlyFineDict2(a=1)
print(f['a']) # Of course, prints "1"
print(f.a) # Works perfectly fine - prints "1"

class FailingDict(TypedDict):
def __getattr__(self, key): return self[key]

f = FailingDict(a=1)
print(f['a']) # Of course, prints "1"
print(f.a) # AttributeError: 'dict' object has no attribute 'a'
Я бы предпочел не импортировать TypedDict из typing и NotRequired из typing_extensions, поскольку это противоречит стандарту PEP и Я не уверен, как он будет взаимодействовать с лексером (вероятно, хорошо), но я не уверен, какова альтернатива.

Подробнее здесь: https://stackoverflow.com/questions/767 ... ions-typed
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Подсказки по типам Python: typing.Mapping и typing.Dict
    Anonymous » » в форуме Python
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Подсказки по типам Python: typing.Mapping и typing.Dict
    Anonymous » » в форуме Python
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Подсказки по типам Python: typing.Mapping и typing.Dict
    Anonymous » » в форуме Python
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Почему io.BytesIO не является подклассом typing.BinaryIO, а io.StringIO не является подклассом typing.TextIO?
    Anonymous » » в форуме Python
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Создайте иерархическую структуру для dict of dict в pyqt5.
    Гость » » в форуме Python
    0 Ответы
    122 Просмотры
    Последнее сообщение Гость

Вернуться в «Python»