【发布时间】:2018-10-03 08:34:26
【问题描述】:
我正在尝试列出类的可设置属性。
使用 2 个答案:list properies of class 和 know if properies is settable。
对于这个类它有效。
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': property_object}。
但是对于子类:
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_c': property_object, 'var_a': property_object}
我知道这是由于 self.class.dict 只返回类的字典,而不是所有父类的字典。 class namespace
所以我的问题是他们获得相当于类的 dict 及其所有父级的方法?
我尝试使用 dir(self),它确实为我提供了所有属性的名称,但它没有给我属性对象。并且使用 getattr(self, 'property_name') 返回属性的 .fget() 值,而不是属性对象。
vars(B) 也只返回 {'var_b': 属性对象}
【问题讨论】:
标签: python inheritance properties