Как получить все атрибуты из init?

Рейтинг: 0Ответов: 1Опубликовано: 29.03.2023

Есть класс Worker

class Worker:
    def __init__(self, name, age, work) -> None:
        self.name = name
        self.age = age
        self.work = work 

    def say_hello(self):
        print(f"Привет, я {self.name}")

    
oleg = Worker('Олег', 43, "Танкист")

Хочу получить список всех атрибутов, которые объявил в __init__. Пока в голову пришло только такое решение

list_attr = [x for x in dir(oleg) if not x.startswith('__')]

# ['age', 'name', 'work']

Может, есть какой-то метод или более лаконичный способ?

Ответы

▲ 1Принят

Можно использовать __dict__

class Worker:
    def __init__(self, name, age, work) -> None:
        self.name = name
        self.age = age
        self.work = work  

oleg = Worker('Олег', 43, "Танкист")

list_attr = [attr for attr in oleg.__dict__ if not callable(getattr(oleg, attr)) and not attr.startswith("__")]

# ['name', 'age', 'work']