gpt4 book ai didi

python - 列出父类的属性对象

转载 作者:行者123 更新时间:2023-12-01 09:30:52 24 4
gpt4 key购买 nike

我正在尝试列出类的可设置属性。

使用 2 个答案:list properies of classknow 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': 属性对象}

最佳答案

使用inspect.getmembers找到了解决方案

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

使用 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

关于python - 列出父类的属性对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49978678/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com