python变量名解析机制?
python如何解析变量名?在下面的示例中。 为什么不在ChildA中打印(基类)而不引用基类? ChildA(Base)中的Base是指低音类、弦乐类还是“string”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
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
指向该类