python 如何解析变量名?在下面的示例中。 为什么 ChildA 中的 print(Base) 不引用 Base 类? ChildA(Base) 中的 Base 是指 Bass 类还是字符串类或“String”?
class Base(object):
def __init__(self):
print( "Base created")
class ChildA(Base):
def __init__(self):
print(Base)
Base.__init__(self)
Base = 'string'
ChildA()
最佳答案
查找在代码执行时动态发生。当 Python 到达 print(Base)
行时,它会查找名为 Base 的局部变量,然后在封闭范围内查找名称 Base
。在这种情况下,它会在全局命名空间中找到一个,并且在您调用 ChildA()
时,该变量是一个字符串。
换句话说,函数中的自由(即非局部)变量确实是自由的:它们所引用的在定义函数时并未“锁定”,而是在每次函数时重新查找被称为。
请注意,class ChildA(Base)
中的 Base 确实明确引用了示例中的 Base
类。那是因为类定义只执行一次,此时,名称 Base
指向该类。
关于python变量名解析机制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21013621/