我可以看到使用self.__dict__
的一流成员变量,但我也希望看到一个属性字典,用@property装饰器定义。我怎样才能做到这一点?在Python对象中,如何查看已使用@property装饰器定义的属性列表?
回答
你可以将函数添加到您的类,它看起来是这样的:
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))
这看起来对该类中的任何属性,然后使用当前实例的值为每个属性创建一个包含条目的字典。
dir(obj)
给出了obj
的所有属性的列表,包括方法和属性。
权,但我需要知道具体属性。我考虑覆盖'@ property'修饰符以将它们添加到'obj'的注册表中,但是我认为Python可能有一个花哨的'__something__',它已经这样做了。 – 2011-05-03 21:48:28
属性是类的一部分,而不是实例。所以,你需要看看self.__class__.__dict__
或等效vars(type(self))
所以性能会
[k for k, v in vars(type(self)).items() if isinstance(v, property)]
+1我喜欢k上的理解,v :) – 2011-05-03 22:15:34
对于对象楼这给成员是属性列表:
[n for n in dir(f) if isinstance(getattr(f.__class__, n), property)]
+1 - 但这只是一个关键字列表,对吗? – 2011-05-03 22:13:51
是的。其他解决方案更完整。 – 2011-05-04 05:43:01
可爱!正是我所追求的。谢谢 – 2011-05-03 22:14:06
请注意,这只列出了在IIRC类上声明的属性。超类的属性不会列出。 – 2011-05-04 04:00:39
您可以走自我.__类__。mro()来查找父类。 – 2012-10-27 18:20:53