Как в объекте Python увидеть список свойств, которые были определены с помощью декоратора @property? - PullRequest
15 голосов
/ 04 мая 2011

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

Ответы [ 4 ]

16 голосов
/ 04 мая 2011

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

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))

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

4 голосов
/ 04 мая 2011

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

Так что свойства будут

[k for k, v in vars(type(self)).items() if isinstance(v, property)]
2 голосов
/ 04 мая 2011

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

[n for n in dir(f) if isinstance(getattr(f.__class__, n), property)]
0 голосов
/ 04 мая 2011

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

...