LINUX.ORG.RU

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

 ,


0

1

Есть класс используемый для хранения констант

class DataUser:
    user_one = 'Иванов'
    user_two = 'Петров'
	:
	:
	:
нужно получить список всех значений его атрибутов, не хочется делать перечисления типа
[DataUser.user_one, DataUser.user_two....]
Есть возможность получить список атрибутов, а нужно значения как это сделать?
[arg for arg in dir(DataUser) if not arg.startswith('_')]
Это тоже не работает
[DataUser.arg for arg in dir(DataUser) if not arg.startswith('_')]

Это тоже не работает

# list(filter(
#     lambda x: not x.startswith('_') and not # callable(getattr(DataUser, x)),
#     dir(DataUser)
# ))

list(map(
    lambda x: getattr(DataUser, x),
    filter(lambda x: not x.startswith('_') and not callable(getattr(DataUser, x)),
           dir(DataUser))
))

['Иванов', 'Петров']

И с __dict__:

filter(lambda x: not x[0].startswith('_') and not callable(x[1]),
       DataUser.__dict__.items())

[('user_one', 'Иванов'), ('user_two', 'Петров')]
vvn_black ★★★★★
()
Последнее исправление: vvn_black (всего исправлений: 4)

Если у тебя датакласс - есть метод dataclasses.fields. Либо через __dict__ как выше написали. Но лучше возьми датакласс если нет жёстких ограничений на этот счёт (быстродействие, древний пистон)

upcFrost ★★★★★
()