@stead

Как сохранять данные о поле в классе?

У меня есть класс:

class Class:
    some_value : str = 'Default value'


мне нужно сохранять некоторые (кастомные )свойства поля
some_value
.

По типу такого:
data = {}

def custom_property(func):
    def wrapper(value1 : bool = False, value2 : bool = True):
        data['value1'] = value1
        data['value2'] = value2

    return wrapper

class Class:
    @custom_property(value1 = True, value2 = False)
    some_value : str


Но как я знаю, декораторы нельзя применять к полям, кто может подсказать решение моей задачи?
  • Вопрос задан
  • 41 просмотр
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Это у тебя просто класс с полем класса? Или это датакласс?
Потому что у датаклассов можно прикрутить метаданные к полям, и потом извлечь их.

Но вообще твоя задача достаточно просто решается "в лоб".
class X:
    meta = {}
    a: int
    meta['a'] = {'foo': 'bar'}

print(X.meta['a'])


Да, можно замутить более хитрый синтаксис, вроде:
class metadata(dict):
    pass

class X(Metaclass):
    a: int = metadata(foo='bar')

А потом описать класс Metaclass так, чтобы он находил поля с метаданными, и складывал их описания в одну структуру данных. По сути, dataclasses.field() примерно так и работает. Но честно, овчинка выделки не стоит. Слишком много мороки, а результат не сильно короче простого словаря.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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