如果在一种情况下使用诸如ints的常量,而在另一种情况下使用诸如dict comprehension的表达式,我将无法理解Python的类初始化如何工作。
这两种情况都涉及使用先前声明的类(静态)变量。
请参阅描述该问题的代码段:
class Working(object):
A = 5
B = A
# everything is initialized just as expected
class NotWorking(object):
A = {
'key': 'value',
}
print(f'Print A: {A}') # {'key': 'value'}
B = {
k: A[k] for k in A.keys()
}
# Throws "NameError: name 'A' is not defined."
为什么两个类的行为不同?
答案 0 :(得分:1)
如果您试图从A克隆B,还有其他方法可以做到。对于A中的多个键,B的声明实际上没有任何意义。
class NowWorking
A = { 'key': 'value',}
B = {k:v for k,v in A.items()}
实例变量应使用__init__
方法声明。这里有一些资源供您查看。