KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Reading the documentation I came across the following paragraph: A scope defines the visibility of a name within a block. If a local variable is defined in a block, its scope includes that block. If the definition occurs in a function block, the scope extends to any blocks contained within the defining one, unless a contained block introduces a different binding for the name. The scope of names defined in a class block is limited to the class block; it does not extend to the code blocks of methods – this includes comprehensions and generator expressions since they are implemented using a function scope. I decided to try accessing class variable from a method myself: >>> class A(): i = 1 def f(self): print(i) >>> a = A() >>> a.i 1 >>> a.f() Traceback (most recent call last): File "<pyshell#7>", line 1, in <module> a.f() File "<pyshell#4>", line 4, in f print(i) NameError: global name 'i' is not defined I know that the variable i may be accessed by explicitly pointing to the class name A.i : >>> a = A() >>> class A(): i = 1 def f(self): print(A.i) >>> a = A() >>> a.f() 1 The question is why the developers of the language made class variables not visible from methods? What is the rationale behind it?
Tags (comma-separated)
Save Edits
Cancel