從https://docs.python.org/3/reference/executionmodel.html#resolution-of-names名稱解析給exec()和eval()
類去網絡nition是一個可執行語句可以使用和德科幻NE 名。這些引用遵循的一般規則的名稱 分辨率的例外是綁定局部變量是 在全局命名空間中擡起頭來。
什麼是「在全局命名空間中查找未綁定的局部變量」在這裏意味着什麼?一個類定義可以是內其他的類定義或函數定義,從而使未綁定局部變量的查找是不是在全局命名空間,但在局部範圍內築巢?
什麼是「一般規則」?
謝謝。
你的鏈接提供了一個例子;在類「A」中,對「b」的賦值失敗,因爲列表理解使用定義爲類屬性的「a」,但不在全局範圍中。 – chepner
的例子不回答我的問題,但解釋說點別的:「名稱的範圍去科幻類中的塊定義爲有限 到類模塊;它不會擴展到方法的代碼塊 - 這包括內涵和發電機 因爲它們是使用函數作用域實現的。「 – Tim
'a'是生成器表達式中的一個未綁定的局部變量(不是列表理解,對不起,我的錯誤),但'class'語句不會創建一個作用域。因此,生成器的封閉作用域不是類,但是是全局範圍,所以''Aa'的賦值不會被生成器表達式看到。 – chepner