2014-01-09 103 views
4

python如何解析變量名?在下面的例子中。 爲什麼不在ChildA內打印(Base)不參考基類? ChildA(Base)中的基部是指Bass類還是字符串類或'String'?python變量名稱解析機制?

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

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


Base = 'string' 
ChildA() 

回答

4

在代碼執行時動態查找。當Python到達print(Base)行時,它會查找一個名爲Base的本地變量,然後在名稱爲Base的名稱範圍內查找。在這種情況下,它會在全局名稱空間中找到一個,並且在您撥打ChildA()時,該變量是一個字符串。

換句話說,函數中的自由(即非本地)變量確實是自由的:它們所指的是在函數定義時沒有被「鎖定」,但是每當函數被調用。

請注意,class ChildA(Base)中的基準確實在您的示例中指的是Base類。這是因爲類定義只執行一次,並且當時名稱Base指向該類。

4

在下面的句子,

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'