ArsenBespalov
@ArsenBespalov
Сам себе разработчик

Как пройти по всем атрибутам класса и выполнить метод аттрибута?

Возможно вопрос легкий, но я чего-то не могу найти решения. Задача:

class Field(object):
    def __init__(self, label=None, flag=None):
        self.label = label
        self.flag = flag

    def to_representation(self, value):
        return {
            "label": self.label,
            "value": value,
            "flag": self.flag,
        }

class Test(objects):
    field1 = Field('Поле №1')
    field2 = Field('Поле №2')
    field3 = Field('Поле №3')

    def __init__(self, data):
        self.field1 = data

    def data(self):
        results = []
        for attribute, value in self._meta.get_fields():
            results.append(attribure.to_representation(value))
        return results


Собственно вопрос как получить список заданных атрибутов текущего класса и каждый из них выполнить?
  • Вопрос задан
  • 128 просмотров
Пригласить эксперта
Ответы на вопрос 2
NeiroNx
@NeiroNx
Программист
Смотрите свойство __dict__, функции dir, getattr, setattr
Думаю с их помощью вы сможете написать то, что вам нужно.
Ответ написан
ArsenBespalov
@ArsenBespalov Автор вопроса
Сам себе разработчик
Пока написал так, не очень красиво, может есть лучше варианты, напишите:

class Field(object):
    def __init__(self, label=None, value=None, flag=None):
        self.label = label
        self.value = value
        self.flag = flag

    @property
    def value(self):
        return self.__value

    @value.setter
    def value(self, value):
        self.__value = value

    @property
    def flag(self):
        return self.__flag

    @flag.setter
    def flag(self, flag):
        self.__flag = flag

    def to_representation(self):
        return {
            'label': self.label,
            'value': self.value,
            'flag': self.flag
        }


class Test(object):
    field1 = Field('Поле №1')
    field2 = Field('Поле №2')
    field3 = Field('Поле №3')

    class Meta:
        fields = ('field1', 'field2', 'field3') # Здесь можно по быстрому исключать поля

    def __init__(self, data):
        self.field1.value = data

   @property
    def data(self):
        results = []
        for field in self.Meta.fields:
            field = getattr(self, field)
            results.append(field.to_representation())
        return results
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы