В объекте Python, как я могу увидеть список свойств, которые были определены с помощью декоратора @property?

Я могу видеть переменные-члены первого класса с помощью self.__dict__, но я также хотел бы увидеть словарь свойств, как это определено в @property декоратор. Как я могу это сделать?

Ответы

Ответ 1

Вы можете добавить функцию в свой класс, которая выглядит примерно так:

def properties(self):
    class_items = self.__class__.__dict__.iteritems()
    return dict((k, getattr(self, k)) 
                for k, v in class_items 
                if isinstance(v, property))

Это ищет любые свойства в классе, а затем создает словарь с записью для каждого свойства с текущим значением экземпляра.

Ответ 2

Свойства являются частью класса, а не экземпляром. Поэтому вам нужно посмотреть self.__class__.__dict__ или эквивалентно vars(type(self))

Таким образом, свойства будут

[k for k, v in vars(type(self)).items() if isinstance(v, property)]

Ответ 3

Для объекта f это дает список членов, которые являются свойствами:

[n for n in dir(f) if isinstance(getattr(f.__class__, n), property)]

Ответ 4

dir(obj) содержит список всех атрибутов obj, включая методы и атрибуты.