gpt4 book ai didi

python - 获取静态变量的列表(键值字典),同时尊重继承

转载 作者:太空宇宙 更新时间:2023-11-04 03:49:48 26 4
gpt4 key购买 nike

我想知道是否有可能在尊重继承的同时获取类中的静态变量列表。

我有一个代码片段,它返回一个类中所有静态变量的键值字典:

dict = {attr: Class.__dict__[attr] for attr in Class.__dict__ if not callable(getattr(Class, attr)) and not attr.startswith('__')}

问题在于它只返回在该特定类中声明的静态变量,而不返回从其父类继承的静态变量。例如:

class Class():
var1 = 1

def __init__(self):
pass

class SubClass(Class):
var2 = 2

def __init__(self):
super().__init__()

if __name__ == '__main__':
dict1 = {attr: Class.__dict__[attr] for attr in Class.__dict__ if not callable(getattr(Class, attr)) and not attr.startswith('__')}
dict2 = {attr: SubClass.__dict__[attr] for attr in SubClass.__dict__ if not callable(getattr(SubClass, attr)) and not attr.startswith('__')}

print(dict1)
print(dict2)

print('Class: var1 = {}'.format(Class.var1))
print('SubClass: var1 = {}, var2 = {}'.format(SubClass.var1, SubClass.var2))

返回

{'var1': 1}
{'var2': 2}
Class: var1 = 1
SubClass: var1 = 1, var2 = 2

我正在考虑获取基类的字典并将其与子类的字典连接起来,但我不确定我可能需要多少继承级别,我宁愿避免不必要的麻烦。

除了我上面建议的方法之外,还有其他方法可以获取类中所有静态变量(包括继承的变量)的键值字典吗?

最佳答案

如果您真的只关心静态变量,也许 dir 内置函数是合适的:

# Python 2.7.6
class A(object):
a_static_var = 'A static var'

class B(A):
b_static_var = 'B static var'

print dir(B)

打印:

['__class__',
...<etc>...,
'a_static_var',
'b_static_var']

要获取静态变量及其值的字典(有人可能会推荐一种更好的方法来过滤值,而不是使用 startswith('_')):

# build dict of non-callable, non-private static variables and their values
static_var_vals = {}
for attr_name in dir(B):
if not attr_name.startswith('_'):
attr = getattr(B, attr_name):

if not callable(attr):
static_var_vals[attr_name] = attr

关于python - 获取静态变量的列表(键值字典),同时尊重继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21856921/

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