educative.io

How does Python tell __name and __rollNumber are not class variables in Class Student?

The class properties __name and __rollNumber look like class variables. How does Python tell they are instance variables (not class variables).

1 Like

Yeah, i don’t think those first two are actually refering to the instance objects, but are actually private class variables. if you run
class Student:
__name = “X”
__rollNumber = None

    def setName(self, name):
        self.__name = name

    def getName(self):
        return self.__name

    def setRollNumber(self, rollNumber):
        self.__rollNumber = rollNumber

    def getRollNumber(self):
        return self.__rollNumber
    def setNameC(self,n):
        Student.__name = n
    def getNameC(self):
        return Student.__name



demo1 = Student()
demo1.setName("Alex")
print("Name:", demo1.getName())
demo1.setRollNumber(3789)
print("Roll Number:", demo1.getRollNumber())
demo2 = Student()
print("Class Name:", demo2.getNameC())
demo2.setNameC("Y")
print("Class Name:", demo1.getNameC())

You will see that its not referring to the instance name, AND you can change the class variable with the class setter


Course: Educative: Interactive Courses for Software Developers
Lesson: https://www.educative.io/courses/learn-oop-in-python/YM6mmqwQEXA