考慮下面的代碼:如何確定哪些名稱空間對Python堆棧框架可見?
GLOBAL_VARIABLE = 1
def someFunction():
nonLocalVariable = 2
def anotherFunction():
localVariable = 3
class LocalClass(object):
__metaclass__ = MyMetaClass
__customCode = """
GLOBAL_VARIABLE + nonLocalVariable + localVariable
"""
anotherFunction()
someFunction()
我的MyMetaClass
實現者,超常類生成 方法基礎上,__customCode
屬性的內容的類。 __customCode
可以包含Python表達式,所以我想確保在__customCode
中提到的變量名稱 引用與在普通Python方法中定義的相同變量名稱 相同的對象。
當元類被調用時,它會傳遞一個包含 這個類的內容的字典,這意味着它知道__customCode
,但這沒什麼幫助。 如果使用,則會得到執行語句的棧幀,即anotherFunction()
。該堆棧幀 有.f_locals
屬性(含localVariable
)和(含GLOBAL_VARIABLE
,除其他事項外)一.f_globals
屬性,但是這兩個 在一起不告訴整個故事。
鑑於anotherFunction()
堆棧幀(或其他任何東西能搶我持有的 從MyMetaClass
裏面執行),我怎麼能發現 命名空間,其中nonLocalVariable
的生活,和任何其他的命名空間嵌套 全球之間本地命名空間?
我目前使用的Python 2.7,但如果答案是不同的Python 3.x, 這也是很好的知道。
@SamueleMattiuzzo:你的編輯不正確;代碼是正確的嵌套,這是*這個問題的重點*。 –
@MartijnPieters cheers martijn,我試着閱讀整個問題,以瞭解他/她是否打算縮進它,或者只是一個間距錯誤:) –