Я заметил, что могу перегрузить __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'
Подробнее здесь: https://stackoverflow.com/questions/767 ... ions-typed