Мне интересно, почему метод класса не смотрит в свою охватывающую область, если имя не определено.Scope in Functions vs. Methods
def test_scope_function():
var = 5
def print_var():
print(var) # finds var from __test_scope_function__
print_var()
globalvar = 5
class TestScopeGlobal:
var = globalvar # finds globalvar from __main__
@staticmethod
def print_var():
print(TestScopeGlobal.var)
class TestScopeClass():
var = 5
@staticmethod
def print_var():
print(var) # Not finding var, raises NameError
test_scope_function()
TestScopeGlobal.print_var()
TestScopeClass.print_var()
Я ожидал бы TestScopeClass.print_var()
печатать 5
, так как он может читать classvar
в TestScopeClass
тела.
Почему это поведение? И что я должен прочитать в docs, чтобы узнать об этом.