Python inheritance lets a child class (subclass) reuse attributes and methods from a parent class (base class). You write shared logic once in the parent and customize only the differences in each child.
Pass the parent class name in parentheses after the child class name (class AdminUser(User):). When both classes define the same method name, the child's version overrides the parent's.
super()Always use super().__init__(...) inside a child's __init__ so the parent initializes its attributes cleanly without hardcoding the parent class name.
class Notification:
def __init__(self, recipient: str) -> None:
self.recipient = recipient
def send(self, message: str) -> str:
return f"Sending to {self.recipient}: {message}"
class EmailNotification(Notification):
def __init__(self, recipient: str, subject: str) -> None:
super().__init__(recipient)
self.subject = subject
def send(self, message: str) -> str:
base = super().send(message)
return f"[{self.subject}] {base}"
note = EmailNotification("[email protected]", "Deploy Ready")
print(note.send("Build v2.4 passed"))
Use isinstance(note, Notification) (True) to verify compatibility with a base class, or issubclass(EmailNotification, Notification) to inspect class definitions.
super().__init__() when overriding __init__: Parent attributes never get created, leading to AttributeError later.super() handles it automatically.Yes. A class can inherit from multiple parents (class Child(MixInA, BaseB):), and Python resolves method lookup using the C3 Method Resolution Order (Child.__mro__).
abc.ABC)?An abstract base class defines @abstractmethod signatures that subclasses must implement before they can be instantiated.
Use inheritance for strict "is-a" relationships (AdminUser is a User). Use composition ("has-a") when an object simply uses another service or component.
Sign in to track your learning journey, earn industry-recognized certificates, and join our elite developer community.
Quick Access With
Experiment with the code from this lesson in our interactive playground.