2011-05-03 40 views

回答

15

你可以将函数添加到您的类,它看起来是这样的:

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

这看起来对该类中的任何属性,然后使用当前实例的值为每个属性创建一个包含条目的字典。

+0

可爱!正是我所追求的。谢谢 – 2011-05-03 22:14:06

+2

请注意,这只列出了在IIRC类上声明的属性。超类的属性不会列出。 – 2011-05-04 04:00:39

+2

您可以走自我.__类__。mro()来查找父类。 – 2012-10-27 18:20:53

0

dir(obj)给出了obj的所有属性的列表,包括方法和属性。

+0

权,但我需要知道具体属性。我考虑覆盖'@ property'修饰符以将它们添加到'obj'的注册表中,但是我认为Python可能有一个花哨的'__something__',它已经这样做了。 – 2011-05-03 21:48:28

4

属性是类的一部分,而不是实例。所以,你需要看看self.__class__.__dict__或等效vars(type(self))

所以性能会

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

+1我喜欢k上的理解,v :) – 2011-05-03 22:15:34

2

对于对象楼这给成员是属性列表:

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

+1 - 但这只是一个关键字列表,对吗? – 2011-05-03 22:13:51

+0

是的。其他解决方案更完整。 – 2011-05-04 05:43:01