Classes & Modules

Python classes, modules, packages, and object-oriented patterns.

Class

class Person:
    def __init__(self, name: str, birth_year: int):
        self.name = name
        self.birth_year = birth_year

    @property
    def age(self) -> int:
        from datetime import date
        return date.today().year - self.birth_year

    def __repr__(self) -> str:
        return f"Person({self.name!r})"
p = Person("Ada", 1985)
print(p.name)    # Ada
print(p.age)     # 41

Class Methods & Static Methods

class Person:
    @classmethod
    def from_dict(cls, data: dict):
        return cls(data["name"], data["birth_year"])

    @staticmethod
    def is_adult(age: int) -> bool:
        return age >= 18

Inheritance

class Employee(Person):
    def __init__(self, name, birth_year, company):
        super().__init__(name, birth_year)
        self.company = company

Modules

A .py file is a module. A directory with __init__.py is a package.

# myapp/models.py
class User:
    ...

# myapp/__init__.py
from .models import User
# Usage
from myapp.models import User
from myapp import User
import myapp
myapp.User(...)

Common Patterns

# Conditional import
try:
    import orjson as json
except ImportError:
    import json

# __all__ controls `from module import *`
__all__ = ["Person", "Employee"]

Next: Back to Python overview