In the following the function, x is reachable outside the scope of foo function.
In [1]: x = 10 In [2]: def foo(): ...: return x ...: In [3]: print(foo()) 10 But why it is not the case when the look up happens inside a instance method of a class? In [1]: class Foo: ...: x = 10 ...: def bar(self): ...: return x ...: In [2]: Foo().bar() --------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-2-77cc08b8637b> in <module> ----> 1 Foo().bar() <ipython-input-1-202509464a3d> in bar(self) 2 x = 10 3 def bar(self): ----> 4 return x NameError: name 'x' is not defined I figured I have to access it like: In [1]: class Foo: ...: x = 10 ...: def bar(self): ...: return self.__class__.x ...: ...: print(Foo().bar()) 10 Just want to know how these search happens in 2 contexts. Thanks, Arup Rakshit a...@zeit.io _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor