python变量名解析机制?

python变量名解析机制?,python,variables,Python,Variables,python如何解析变量名?在下面的示例中。 为什么不在ChildA中打印(基类)而不引用基类? ChildA(Base)中的Base是指低音类、弦乐类还是“string” class Base(object): def __init__(self): print( "Base created") class ChildA(Base): def __init__(self): print(Base) Base.__init__(s

python如何解析变量名?在下面的示例中。 为什么不在ChildA中打印(基类)而不引用基类? ChildA(Base)中的Base是指低音类、弦乐类还是“string”

class Base(object):
    def __init__(self):
        print( "Base created")

class ChildA(Base):
    def __init__(self):
        print(Base)
        Base.__init__(self)


Base = 'string'
ChildA()

在下面的句子中

Base = 'string'
代码使用字符串对象覆盖
Base

>>> class Base(object):
...     def __init__(self):
...         print( "Base created")
...
>>> class ChildA(Base):
...     def __init__(self):
...         print(Base)
...         Base.__init__(self)
...
>>> Base
<class '__main__.Base'>
>>> Base = 'string' # <-------
>>> Base
'string'
>>类基(对象):
...     定义初始化(自):
...         打印(“基础创建”)
...
>>>ChildA类(基本类):
...     定义初始化(自):
...         打印(基本)
...         基本。初始(自我)
...
>>>基地
>>>Base='string'#>>Base
“字符串”

执行代码时会动态进行查找。当Python到达行
print(Base)
时,它会查找名为Base的局部变量,然后在封闭范围内查找名称
Base
。在本例中,它在全局命名空间中找到一个变量,在调用
ChildA()
时,该变量是一个字符串

换句话说,函数中的自由(即非局部)变量实际上是自由的:它们所指的在定义函数时不是“锁定”的,而是在每次调用函数时重新查找

请注意,
classchilda(Base)
中的Base在您的示例中明确地引用了
Base
类。这是因为类定义只执行一次,此时,名称
Base
指向该类