A class in Python is a user-defined template for creating objects. It bundles data and functions together, making it easier to manage and use them. When we create a new class, we define a new type of object. We can then create multiple instances of this object type.
Classes are created usingclass keyword. Attributes are variables defined inside the class and represent the properties of the class. Attributes can be accessed using the dot . operator (e.g., MyClass.my_attribute).
Create a Class
Python# define a classclassDog:sound="bark"# class attribute
Create Object
An Object is an instance of a Class. It represents a specific implementation of the class and holds its own data.
Now, let's create an object fromDog class.
PythonclassDog:sound="bark"# Create an object from the classdog1=Dog()# Access the class attributeprint(dog1.sound)
sound attribute is a class attribute. It is shared across all instances of Dog class, so can be directly accessed through instancedog1.
Using __init__() Function
In Python, class has__init__()function. It automatically initializes object attributes when an object is created.
PythonclassDog:species="Canine"# Class attributedef__init__(self,name,age):self.name=name# Instance attributeself.age=age# Instance attribute
Explanation:
- class Dog: Defines a class named Dog.
- species: A class attribute shared by all instances of the class.
- __init__ method:Initializes the name and age attributes when a new object is created.
Initiate Object with __init__
PythonclassDog:species="Canine"# Class attributedef__init__(self,name,age):self.name=name# Instance attributeself.age=age# Instance attribute# Creating an object of the Dog classdog1=Dog("Buddy",3)print(dog1.name)# Output: Buddyprint(dog1.species)# Output: Canine
Explanation:
- dog1 = Dog("Buddy", 3): Creates an object of the Dog class with name as "Buddy" and age as 3.
- dog1.name:Accesses the instance attribute name of the dog1 object.
- dog1.species: Accesses the class attribute species of the dog1 object.
Self Parameter
selfparameter is a reference to the current instance of the class. It allows us to access the attributes and methods of the object.
PythonclassDog:def__init__(self,name,age):self.name=nameself.age=agedefbark(self):print(f"{self.name} is barking!")# Creating an instance of Dogdog1=Dog("Buddy",3)dog1.bark()
Explanation:
- Inside bark(), self.name accesses the specific dog's name and prints it.
- When we call dog1.bark(), Python automatically passes dog1 as self, allowing access to its attributes.
__str__ Method
__str__ method in Python allows us to define a custom string representation of an object. By default, when we print an object or convert it to a string using str(), Python uses the default implementation, which returns a string like <__main__.ClassName object at 0x00000123>.
PythonclassDog:def__init__(self,name,age):self.name=nameself.age=agedef__str__(self):returnf"{self.name} is{self.age} years old."# Correct: Returning a stringdog1=Dog("Buddy",3)dog2=Dog("Charlie",5)print(dog1)print(dog2)
OutputBuddy is 3 years old.Charlie is 5 years old.
Explanation:
- __str__ Implementation:Defined as a method in the Dog class. Uses the self parameter to access the instance's attributes (name and age).
- Readable Output:When print(dog1) is called, Python automatically uses the __str__ method to get a string representation of the object. Without __str__, calling print(dog1) would produce something like <__main__.Dog object at 0x00000123>.
Class and Instance Variables in Python
In Python, variables defined in a class can be eitherclass variables or instance variables, and understanding the distinction between them is crucial for object-oriented programming.
Class Variables
These are the variables that are shared across all instances of a class. It is defined at the class level, outside any methods. All objects of the class share the same value for a class variable unless explicitly overridden in an object.
Instance Variables
Variables that are unique to each instance (object) of a class. These are defined within __init__ method or other instance methods. Each object maintains its own copy of instance variables, independent of other objects.
Example:
PythonclassDog:# Class variablespecies="Canine"def__init__(self,name,age):# Instance variablesself.name=nameself.age=age# Create objectsdog1=Dog("Buddy",3)dog2=Dog("Charlie",5)# Access class and instance variablesprint(dog1.species)# (Class variable)print(dog1.name)# (Instance variable)print(dog2.name)# (Instance variable)# Modify instance variablesdog1.name="Max"print(dog1.name)# (Updated instance variable)# Modify class variableDog.species="Feline"print(dog1.species)# (Updated class variable)print(dog2.species)
OutputCanineBuddyCharlieMaxFelineFeline
Explanation:
- Class Variable (species):Shared by all instances of the class. Changing Dog.species affects all objects, as it's a property of the class itself.
- Instance Variables (name, age): Defined in the __init__ method. Unique to each instance (e.g., dog1.name and dog2.name are different).
- Accessing Variables: Class variables can be accessed via the class name (Dog.species) or an object (dog1.species). Instance variables are accessed via the object (dog1.name).
- Updating Variables:Changing Dog.species affects all instances. Changing dog1.name only affects dog1 and does not impact dog2.