我试图找出python中的一个对象是什么类型(是一个方法?是一个类?是静态方法?)使用属性,例如:
迭代我模块的__dict__
属性对象中存在的对象:如果一个对象有一个名为__class__
的属性,并且它的__name__
属性等于"class"
那么它就是一个类。如果没有,它是我的模块中定义的变量(无论__name__
返回什么类)。
如果一个对象有一个名为"func_name"
的属性是一个方法。当我遇到所谓的属性时会出现问题。属性对象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__
等,因为我没有对象的实例来调用此属性(getter将对象作为参数)。
对于上下文,我使用Boost.Python从C ++代码检查这些对象,但由于我只使用属性,我认为它与解决方案无关。只是为了证明为什么我没有使用更常规的方法,比如检查模块。
我认为由于Python的动态特性,这是不可能的。
我能够通过记录属性和读取__doc__
属性来解决它