Skip to main content

Python Classes and objects

Classes and objects are fundamental concepts in object-oriented programming (OOP) in Python. They allow you to create reusable, modular code by defining templates (classes) for creating specific instances (objects).

Defining a Class

A class in Python is defined using the class keyword followed by the class name and a colon. The class body contains methods (functions) and attributes (variables).

Example:

class Dog:
    # Class attribute
    species = "Canis familiaris"

    # Initializer / Instance attributes
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # Instance method
    def description(self):
        return f"{self.name} is {self.age} years old"

    # Another instance method
    def speak(self, sound):
        return f"{self.name} says {sound}"

Creating Objects

An object is an instance of a class. You create an object by calling the class as if it were a function.

Example:

class Dog:
    # Class attribute
    species = "Canis familiaris"

    # Initializer / Instance attributes
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # Instance method
    def description(self):
        return f"{self.name} is {self.age} years old"

    # Another instance method
    def speak(self, sound):
        return f"{self.name} says {sound}"

Class and Instance Attributes

  • Class attributes are shared among all instances of a class.
  • Instance attributes are specific to each object created from the class.

Example:

print(dog1.species)  # Output: Canis familiaris
print(dog2.species)  # Output: Canis familiaris

# Changing the species attribute for all instances
Dog.species = "Canine"
print(dog1.species)  # Output: Canine
print(dog2.species)  # Output: Canine

# Changing the name attribute for dog1
dog1.name = "Max"
print(dog1.name)  # Output: Max
print(dog2.name)  # Output: Lucy

Inheritance

Inheritance allows you to create a new class based on an existing class. The new class (child class) inherits attributes and methods from the existing class (parent class).

Example:

class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        raise NotImplementedError("Subclass must implement abstract method")

class Dog(Animal):
    def speak(self):
        return f"{self.name} says Woof"

class Cat(Animal):
    def speak(self):
        return f"{self.name} says Meow"

# Creating instances of Dog and Cat
dog = Dog("Buddy")
cat = Cat("Whiskers")

print(dog.speak())  # Output: Buddy says Woof
print(cat.speak())  # Output: Whiskers says Meow


Encapsulation

Encapsulation restricts direct access to some of an object's attributes and methods. This is achieved using private attributes and methods.

Example:

class Car:
    def __init__(self, make, model):
        self.make = make
        self.model = model
        self.__engine_running = False  # Private attribute

    def start_engine(self):
        self.__engine_running = True

    def stop_engine(self):
        self.__engine_running = False

    def engine_status(self):
        return self.__engine_running

car = Car("Toyota", "Corolla")
car.start_engine()
print(car.engine_status())  # Output: True
car.stop_engine()
print(car.engine_status())  # Output: False


Polymorphism

Polymorphism allows different classes to be treated as instances of the same class through a common interface. This is typically achieved by method overriding.

Example:

class Bird:
    def fly(self):
        raise NotImplementedError("Subclass must implement abstract method")

class Sparrow(Bird):
    def fly(self):
        return "Sparrow flies"

class Penguin(Bird):
    def fly(self):
        return "Penguin can't fly"

# Using polymorphism
def describe_flight(bird):
    print(bird.fly())

sparrow = Sparrow()
penguin = Penguin()

describe_flight(sparrow)  # Output: Sparrow flies
describe_flight(penguin)  # Output: Penguin can't fly

Summary

  • Classes: Blueprints for creating objects. They encapsulate data (attributes) and behavior (methods).
  • Objects: Instances of classes.
  • Attributes: Variables that belong to a class or an object.
  • Methods: Functions that belong to a class and typically operate on its objects.
  • Inheritance: Mechanism for creating a new class based on an existing class.
  • Encapsulation: Restricts access to certain details of an object, promoting modularity and maintenance.
  • Polymorphism: Allows objects of different classes to be treated through the same interface.

Using these principles, you can create structured, modular, and reusable code in Python.

Comments

Popular posts from this blog

Power BI tenant settings and admin portal

As of my last update, Power BI offers a dedicated admin portal for managing settings and configurations at the tenant level. Here's an overview of Power BI tenant settings and the admin portal: 1. Power BI Admin Portal: Access : The Power BI admin portal is accessible to users with admin privileges in the Power BI service. URL : You can access the admin portal at https://app.powerbi.com/admin-portal . 2. Tenant Settings: General Settings : Configure general settings such as tenant name, regional settings, and language settings. Tenant Administration : Manage user licenses, permissions, and access rights for Power BI within the organization. Usage Metrics : View usage metrics and reports to understand how Power BI is being used across the organization. Service Health : Monitor the health status of the Power BI service and receive notifications about service incidents and outages. Audit Logs : Access audit logs to track user activities, access requests, and administrative actions wit...

Performance Optimization

Performance optimization in SQL is crucial for ensuring that your database queries run efficiently, especially as the size and complexity of your data grow. Here are several strategies and techniques to optimize SQL performance: Indexing Create Indexes : Primary Key and Unique Indexes : These are automatically indexed. Ensure that your tables have primary keys and unique constraints where applicable. Foreign Keys : Index foreign key columns to speed up join operations. Composite Indexes : Use these when queries filter on multiple columns. The order of columns in the index should match the order in the query conditions. Avoid Over-Indexing:  Too many indexes can slow down write operations (INSERT, UPDATE, DELETE). Only index columns that are frequently used in WHERE clauses, JOIN conditions, and as sorting keys. Query Optimization Use SELECT Statements Efficiently : SELECT Only Necessary Columns : Avoid using SELECT * ; specify only ...

DAX UPPER Function

The DAX UPPER function in Power BI is used to convert all characters in a text string to uppercase. This function is useful for standardizing text data, ensuring consistency in text values, and performing case-insensitive comparisons. Syntax: UPPER(<text>) <text>: The text string that you want to convert to uppercase. Purpose: The UPPER function helps ensure that text data is consistently formatted in uppercase. This can be essential for tasks like data cleaning, preparing text for comparisons, and ensuring uniformity in text-based fields. E xample: Suppose you have a table named "Customers" with a column "Name" that contains names in mixed case. You want to create a new column that shows all names in uppercase. UppercaseName = UPPER(Customers[Name]) Example Scenario: Assume you have the following "Customers" table: You can use the UPPER function as follows: Using the UPPER function, you can convert all names to uppercase: UppercaseName = ...