Class Variables Andmethds
Class Variables
Class variables are variables that are shared by all instances of a class. They are defined directly within the class but outside of any method. Unlike instance variables, which are unique to each object, a single copy of a class variable is shared among all objects of that class. They are useful for storing data that is common to all instances, such as constants or default values.
Example:
Consider a School class. All students in the school share the same school name. This can be stored as a class variable.
class School:
# This is a class variable
school_name = "Springfield Elementary"
def __init__(self, student_name):
self.student_name = student_name # This is an instance variable
# Creating two student objects
student1 = School("Bart Simpson")
student2 = School("Lisa Simpson")
print(f"{student1.student_name} attends {student1.school_name}.")
print(f"{student2.student_name} attends {student2.school_name}.")
# You can also access the class variable directly from the class
print(School.school_name)
In this example, school_name is a class variable. Both student1 and student2 objects access the exact same value for school_name.
Methods
Methods are functions defined inside a class that describe the behaviors of an object. There are two main types of methods related to class and instance variables:
- Instance Methods: These are the most common type of method. They operate on an instance of a class and can access both instance and class variables. They always have
selfas their first parameter, which refers to the specific object the method is called on. - Class Methods: These methods operate on the class itself, not on an instance. They are declared with the
@classmethoddecorator and takecls(short for class) as their first parameter, which refers to the class itself. They are often used to create factory methods or to modify class variables.
Example:
Let’s expand the School class with both types of methods.
class School:
# Class variable
school_name = "Springfield Elementary"
total_students = 0
def __init__(self, student_name):
self.student_name = student_name
School.total_students += 1 # Incrementing the class variable
# Instance Method
def get_student_info(self):
return f"{self.student_name} is a student at {self.school_name}."
# Class Method
@classmethod
def get_total_students(cls):
return f"The total number of students is {cls.total_students}."
# Creating student objects
student1 = School("Bart Simpson")
student2 = School("Lisa Simpson")
# Calling the instance method
print(student1.get_student_info())
# Calling the class method using the class
print(School.get_total_students())
In this example, get_student_info is an instance method that uses self to access the specific student’s name. get_total_students is a class method that uses cls to access and report the shared total_students variable for the entire class.
This program demonstrates the use of class variables, instance variables, and different types of methods in Python. It creates a School class to manage student information and a total count of students.
Class and Instance Variables
school_name = "Springfield Elementary": This is a class variable. It’s defined directly inside the class and is shared by all objects created from theSchoolclass.total_students = 0: This is also a class variable. It keeps a running count of allSchoolobjects created.self.student_name = student_name: This is an instance variable. It’s created within the__init__method and is unique to each individual student object (student1,student2, etc.).
Methods
__init__(self, student_name): This is the constructor method. It’s called automatically whenever a newSchoolobject is created. It initializes the uniquestudent_namefor that object and increments the sharedtotal_studentsclass variable.get_student_info(self): This is an instance method. It uses theselfparameter to access and return a string that includes both the uniquestudent_name(an instance variable) and the sharedschool_name(a class variable) for a specific object.get_total_students(cls): This is a class method, indicated by the@classmethoddecorator. It takescls(the class itself) as its first parameter instead ofself(the instance). This method can only access and operate on class variables, such ascls.total_students. It’s called on the class itself (School.get_total_students()) rather than on an object.
Program Flow
student1 = School("Bart Simpson"): A newSchoolobject is created. The__init__method is called, settingstudent1.student_nameto “Bart Simpson” and incrementingSchool.total_studentsto 1.student2 = School("Lisa Simpson"): AnotherSchoolobject is created.__init__is called again, settingstudent2.student_nameto “Lisa Simpson” and incrementingSchool.total_studentsto 2.print(student1.get_student_info()): Theget_student_infoinstance method is called on thestudent1object. It returns the string “Bart Simpson is a student at Springfield Elementary.”print(School.get_total_students()): Theget_total_studentsclass method is called on theSchoolclass. It returns the string “The total number of students is 2.”