Есть возможность контролировать способы получения аттрибутов из объекта , с помощью магического метода
__getattr__.Когда мы вызваем что-то вроде
<myobject>.<myattribute>,Python будет искать <myattribute> в библиотеке объекта, вызвав __getattribute__в нём.
Если ничего не найдено , то объект не имеет аттрибут с именем которую мы ищем, тогда extra метод
__getattr__ вызывается , получая имя аттрибута (myattribute) как параметр.Получая это значение мы можем котролировать значения которые будут возвращены к нашим объектам.
Мы даже можем создать новый аттрибут и вернуть объекту "ненайденный аттрибут".
✅Ниже показано определение метода
__getattr__ .class DynamicAttributes: def __init__(self, attribute): self.attribute = attributedef __getattr__(self, attr): if attr.startswith("fallback_"): name = attr.replace("fallback_", "") return f"[fallback resolved] {name}" raise AttributeError(f"{self.__class__.__name__} has no attribute {attr}")Примечание:
🔴Будьте осторожны при реализации такого динамического метода, как __getattr__,
и используйте его с осторожностью. При реализации __getattr__,
поднять AttributeError.