Python 列出父类的属性对象

Python 列出父类的属性对象,python,inheritance,properties,Python,Inheritance,Properties,我试图列出类的可设置属性 使用2个答案:和 这门课很有效 class A(object): def __init__(self): self._var_a = 1 self._var_b = 2 @property def var_a(self): return self._var_a @var_a.setter def var_a(self, value): self._var_a = v

我试图列出类的可设置属性

使用2个答案:和

这门课很有效

class A(object):
    def __init__(self):
        self._var_a = 1
        self._var_b = 2

    @property
    def var_a(self):
        return self._var_a
    @var_a.setter
    def var_a(self, value):
        self._var_a = value

    @property
    def var_b(self):
        return self._var_b

    @property
    def settable_property(self):
        settable_properties = {}
        for name, value in self.__class__.__dict__.iteritems():
            if isinstance(value, property) and value.fset is not None:
                settable_properties[name] = value
        return settable_properties

a = A()
a.settable_property 
我得到{'var_a':属性{u对象}

但对于儿童班:

class B(A):
    def __init__(self):
        self._var_c = 1
        super(B, self).__init__()

    @property
    def var_c(self):
        return self._var_c
    @var_c.setter
    def var_c(self, value):
        self._var_c = value

b = B()
b.settable_property
我只得到{'var_c':property_object}。我期望{'var\u c':属性对象,'var\u a':属性对象}

我知道这是因为self。dict只返回该类的dict,而不是所有父类的dict

所以我的问题是,他们有没有一种方法来获得班级及其家长的口述的等价物

我试着使用dir(self),它确实给了我所有属性的名称,但并没有给我属性对象。并使用getattr(self,'property_name')返回属性的.fget()值,而不是属性对象

vars(B)也只返回{'var_B':property object}

使用

使用dir和getattr的其他解决方案:

def settable_property(self):
    settable_properties = {}
    for name in dir(self.__class__:
        value = getattr(self.__class__, name)  # getattr on class not instance
        if isinstance(value, property) and value.fset is not None:
            # WARNING this property object is not bound to an instance
            # if you want to use it either pass the instance like:
            #     value.fget(self)
            # or bind the function to the instance: 
            #      value = value.fget.__get__(self, self.__class__)

            settable_properties[name] = value 
    return settable_properties
def settable_property(self):
    settable_properties = {}
    for name in dir(self.__class__:
        value = getattr(self.__class__, name)  # getattr on class not instance
        if isinstance(value, property) and value.fset is not None:
            # WARNING this property object is not bound to an instance
            # if you want to use it either pass the instance like:
            #     value.fget(self)
            # or bind the function to the instance: 
            #      value = value.fget.__get__(self, self.__class__)

            settable_properties[name] = value 
    return settable_properties