我试图列出类的可设置属性。你知道吗
使用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\u a':property\u 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\u c':property\u object}。我需要{varu c':property\u object,'varu a':property\u object}
我知道这是因为我自己。classdict只返回该类的dict,而不是所有父类的dict。class namespace
所以我的问题是他们有没有办法得到一个相当于听写的班级及其家长?你知道吗
我试着使用dir(self),它确实会给我所有属性的名称,但它并没有给我属性对象。并使用getattr(self,'property\u name')返回属性的.fget()值,而不是属性对象。你知道吗
vars(B)也只返回{var\u B':property object}
找到了一个使用inspect.getmembers的解决方案
使用dir和getattr的另一个解决方案:
相关问题 更多 >
编程相关推荐