class foo:
loadings = dict(hi=1)
if 'hi' in loadings:
print(loadings['hi'])
# works
print({e : loadings[e] for e in loadings})
# NameError global name 'loadings' not defined
我想引用类的命名空间,以及,但不工作或者
class foo:
loadings = dict(hi=1)
if 'hi' in loadings:
print(loadings['hi'])
#works
print({e : foo.loadings[e] for e in foo.loadings})
#NameError: name 'foo' is not defined
当然还有,这按预期工作
class foo:
loadings = dict(hi=1)
if 'hi' in loadings:
print(loadings['hi'])
print({e : foo.loadings[e] for e in foo.loadings})
我w蚂蚁了解为什么这个范围问题正在发生,那么,如果我正在尝试做一些疯狂的事情,那么理解最好的方式就是去做。我的感觉是,第一个代码片段应该像现在这样工作,但当然不是。
目标
我用罐装数据库查询一起创建一些CSV/JSON文件DataManager类/模块,一站式我的程序和获取数据。有一些静态数据和一些动态数据,所以它看起来像是在同一个类中很好地使用了静态和非静态数据成员。虽然我明白这些可能是模块级别的变量,但我喜欢拥有静态类数据成员的概念(可能是因为Java的偏见)。任何帮助深表感谢
我的解决方案(现在)
我最终扬起列表理解停留在类范围,在它上面会变成这样的事情
class foo:
loadings = dict(hi=1)
temp = dict()
for e in loadings:
temp[e] = loadings[e] # keep in mind this is a minimal example, I probably wouldn't do (just) this
print(temp) # works
del temp
这是不漂亮,但它的工作原理现在
你应该做的一切,一个初始化函数内部.... –
我认为它也是有趣的是,'打印({K:v对于k,v in loadings.items()})''确实有效。所以'加载'至少在dict理解中是可见的 – cmd
这不是在init函数中完成的,因为这是一次加载的类的静态数据。我可以有一些像'runonce'这样的标志,但是似乎有一些类级代码是有原因的。 – user25064