Python Basics - 12. Advanced OOP Essentials¶
This notebook expands OOP topics with @property, class methods, static methods, and data classes. These patterns are widely used in production Python code.
Download Notebook¶
1. @property for Controlled Attributes¶
@property lets you expose method logic as if it were an attribute, helping enforce validation rules.
class Circle:
def __init__(self, radius):
self.radius = radius
@property
def radius(self):
return self._radius
@radius.setter
def radius(self, value):
if value <= 0:
raise ValueError("Radius must be positive")
self._radius = value
@property
def area(self):
return 3.14159 * self.radius ** 2
c = Circle(3)
print(c.radius, c.area)
3 28.27431
2. Class Methods vs Static Methods¶
@classmethodreceivescls, often used as alternative constructors.@staticmethoddoes not receiveselforcls; it’s a utility function logically grouped inside a class.
class Temperature:
def __init__(self, celsius):
self.celsius = celsius
@classmethod
def from_fahrenheit(cls, fahrenheit):
return cls((fahrenheit - 32) * 5 / 9)
@staticmethod
def is_freezing(celsius):
return celsius <= 0
t = Temperature.from_fahrenheit(68)
print(t.celsius)
print(Temperature.is_freezing(t.celsius))
20.0
False
3. Data Classes¶
dataclasses reduce boilerplate by auto-generating __init__, __repr__, and comparisons for data containers.
from dataclasses import dataclass
@dataclass
class Student:
name: str
score: float
alice = Student("Alice", 95.5)
bob = Student("Bob", 88.0)
print(alice)
print(alice.score > bob.score)
Student(name='Alice', score=95.5)
True