Python 列出父类的属性对象
我试图列出类的可设置属性 使用2个答案:和 这门课很有效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
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