Я пытаюсь выяснить, какого рода объект в Python (это метод? Это класс? Это статический метод?), Используя атрибуты, например:
Перебор объектов, присутствующих в __dict__
объекте атрибута моего модуля:
Если объект имеет атрибут с именем __class__
и его атрибут __name__
равен "class"
, то это класс. Если нет, то это переменная, определенная в моем модуле (класса, который вернул __name__
).
Если объект имеет атрибут с именем "func_name"
, это метод.
Проблема возникает, когда я сталкиваюсь с так называемыми properties . Объект свойства prop.attr("__class__").attr("__name__")"
вернет "property"
. Но как я могу извлечь тип собственности? Я хочу знать, если это число с плавающей запятой, целое число и т. Д.
>>>Vector3 is a class
>>>Vector3 has a member Y (property)
>>><property object at 0x000002840809E278>
>>>Y property attributes: ['__class__', '__delattr__', '__delete__', '__doc__', '__format__', '__get__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__set__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'deleter', 'fdel', 'fget', 'fset', 'getter', 'setter']
Я не могу использовать getter
, __get__
и т. Д., Потому что у меня нет экземпляра объекта для вызова этого свойства через него (геттер принимает объект в качестве аргумента).
Для контекста я проверяю эти объекты из кода C ++, используя Boost.Python, но, поскольку я использую только атрибуты, я думаю, что это не имеет отношения к решению. Просто чтобы объяснить, почему я не использую более обычный метод, скажем, с модулем inspect.