Кратчайший способ создания объекта с произвольными атрибутами в Python? - PullRequest
25 голосов
/ 17 февраля 2010

Эй, я только начал задумываться об этом, когда наткнулся на код, который ожидал объект с определенным набором атрибутов (но без указания типа этого объекта).

Одним из решений было бы создание нового класса с атрибутами, ожидаемыми в коде, но, поскольку я вызываю другой код, которому также нужны объекты с (другими) атрибутами, мне пришлось бы создавать все больше и больше классов.

Более коротким решением является создание универсального класса, а затем установка атрибутов для его экземпляров (для тех, кто думал об использовании экземпляра object вместо создания нового класса, который не будет работать с * 1006). * экземпляры не допускают новые атрибуты).

Последнее, самое короткое решение, которое я придумал, - это создание класса с конструктором, который принимает аргументы ключевых слов, как конструктор dict, а затем устанавливает их как атрибуты:

class data:
    def __init__(self, **kw):
        for name in kw:
            setattr(self, name, kw[name])

options = data(do_good_stuff=True, do_bad_stuff=False)

Но я не могу не чувствовать, что упустил что-то очевидное ... Разве нет встроенного способа сделать это (предпочтительно поддерживается в Python 2.5)?

Ответы [ 11 ]

0 голосов
/ 17 февраля 2010

Если я правильно понимаю ваш вопрос, вам нужны записи. Классы Python могут использоваться таким образом, что вы и делаете.

Я считаю, что самый питонический способ обращения с "записями" - это просто ... словари ! Класс - это словарь по стероидам.

Ваш пример класса data по сути является способом преобразования словаря в класс.

(С другой стороны, я бы предпочел использовать self.__setattr__(name, kw[name]).)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...