Ваш оригинальный код выглядит хорошо (хотя я бы не назвал локальную переменную тем же именем, что и вмещающая функция).
Обратите внимание, что свойства работают только в классах нового стиля, поэтому вам нужно наследовать от object . Также вам необходимо вызвать атрибут свойства из экземпляра.
Если вам нужен атрибут класса, то свойство не будет работать, и вам нужно написать собственный дескриптор для свойства уровня класса:
class ClassProperty(object):
def __init__(self, func):
self.func = func
def __get__(self, inst, cls):
return self.func(cls)
class A(object):
model_fields = ['field1', 'field2', 'field3']
@ClassProperty
def fields(cls):
return cls.model_fields + ['extra_field']
print A.fields