Получение выбранных атрибутов из объекта класса

Соберите словарь через 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, чтобы пользователь не запросил секретные или служебные атрибуты.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее