Advanced Class Methods
Static methods, class methods, abstract methods, and method patterns.
Overview
Master advanced method patterns.
Static Methods
class MathUtils:
@staticmethod
def add(a, b):
return a + b
@staticmethod
def multiply(a, b):
return a * b
# No need to instantiate
print(MathUtils.add(5, 3)) # 8
print(MathUtils.multiply(5, 3)) # 15
Class Methods
class Date:
def __init__(self, year, month, day):
self.year = year
self.month = month
self.day = day
@classmethod
def from_string(cls, date_string):
year, month, day = map(int, date_string.split('-'))
return cls(year, month, day)
@classmethod
def today(cls):
import datetime
today = datetime.date.today()
return cls(today.year, today.month, today.day)
date1 = Date.from_string("2024-01-15")
date2 = Date.today()
Abstract Methods
from abc import ABC, abstractmethod
class Database(ABC):
@abstractmethod
def connect(self):
pass
@abstractmethod
def query(self, sql):
pass
@abstractmethod
def close(self):
pass
class PostgreSQL(Database):
def connect(self):
print("Connecting to PostgreSQL")
def query(self, sql):
print(f"Executing: {sql}")
def close(self):
print("Closing PostgreSQL connection")
# db = Database() # Error
db = PostgreSQL()
db.connect()
Method Resolution Order
class A:
def method(self):
print("A.method")
class B(A):
def method(self):
print("B.method")
class C(B):
pass
c = C()
c.method() # B.method
print(C.__mro__) # (<class 'C'>, <class 'B'>, <class 'A'>, <class 'object'>)
Practice
Implement a factory pattern using class methods.