我想了解python作用域規則。要做到這一點,我嘗試同一模塊訪問私人模塊變量從類
bar = "bar"
_bar = "underscore"
__bar = "double underscore"
def foo():
print bar
print _bar
print globals()["__bar"]
print __bar
class Foo:
def __init__(self):
print bar
print _bar
print globals()["__bar"]
print __bar #NameError: global name '_Foo__bar' is not defined
foo()
Foo()
它失敗NameError
在訪問從類「非常私人」的變量。我無法在規範中找到任何有關這方面的信息。那麼,爲什麼它失敗了,這種行爲在哪裏描述?
你可以發佈完整的輸出嗎?還是完整的異常消息? –
是的,刪除是因爲 - 我驚訝地發現 - 即使使用獨立名稱__bar也會發生這種情況。您從文檔發佈的報價並沒有明確說明。 –
@DanielRoseman:*當在類定義中文本出現的標識符*和*這種轉換獨立於使用標識符的語法上下文*這包括任何在類體中任何地方都是標識符的標識符,包括方法定義。無論它是屬性,全局還是本地都無所謂。 –