Соберите словарь через getattr(instance, name) для каждого запрошенного имени. По умолчанию отсутствующий атрибут должен вызвать AttributeError.
Получение выбранных атрибутов из объекта класса
Соберите словарь через getattr(instance, name) для каждого запрошенного имени. По умолчанию отсутствующий атрибут должен вызвать AttributeError.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Создайте функцию, принимающую объект произвольного класса и массив имён атрибутов. Функция должна вернуть словарь, где ключами являются указанные имена полей, а значениями – соответствующие значения этих полей у переданного объекта.
def extract_fields(instance, fields):
# ваш код здесь
pass
Пример использования:
class User:
def __init__(self, name, age, email):
self.name = name
self.age = age
self.email = email
u = User('Alice', 30, 'alice@example.com')
result = extract_fields(u, ['name', 'email'])
# result должно быть {'name': 'Alice', 'email': 'alice@example.com'}
Ответ
Соберите словарь через getattr(instance, name) для каждого запрошенного имени. По умолчанию отсутствующий атрибут должен вызвать AttributeError.
def extract_fields(instance, fields):
return {name: getattr(instance, name) for name in fields}
Для указанного объекта результатом будет {'name': 'Alice', 'email': 'alice@example.com'}. Повторяющиеся имена станут одним ключом словаря. Если отсутствие поля допустимо, можно явно выбрать getattr(instance, name, None), но тогда оно не отличается от существующего атрибута со значением None.
getattr может вызвать property или другой дескриптор, а не только прочитать __dict__. Для внешнего API ограничивайте разрешённые поля allowlist, чтобы пользователь не запросил секретные или служебные атрибуты.