Reviewed by Aditya Kumar · Last reviewed 2026-03-24
**Why Constructors Matter:** __init__ establishes invariants (required fields, connections, config). In data pipelines, misconfigured objects cause late failures (e.g., missing DB connection at runtime). **Key Points:** __new__ creates the object; __init__ initializes it. Never...
Why Constructors Matter: __init__ establishes invariants (required fields, connections, config). In data pipelines, misconfigured objects cause late failures (e.g., missing DB connection at runtime).
Key Points: __new__ creates the object; __init__ initializes it. Never use mutable defaults: def __init__(self, config={})—shared across instances. Use None and assign. For inheritance: always call super().__init__().
Production: Use @dataclass for boilerplate reduction; type hints for clarity. In pipeline classes, validate config in __init__ and fail fast.
class DataPipeline:
def __init__(self, source: str, dest: str, config: dict | None = None):
self.source = source
self.dest = dest
self.config = config or {}
Red Flag: Mutable default argument (config={}). Pro-Move: 'We use pydantic BaseModel for pipeline config—validation in __init__ catches schema errors at deploy time.'
According to DataEngPrep.tech, this is one of the most frequently asked Python/Coding interview questions, reported at 1 company. DataEngPrep.tech maintains an editor-reviewed database of 1,863 data engineering interview questions across 7 categories.