Skip to content

[Term Entry] Python Inheritance: Hybrid Inheritance #7099

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
---
Title: 'Hybrid Inheritance'
Description: 'Hybrid inheritance mixes inheritance types, letting a class inherit traits from multiple parents to model complex real-world ties.'
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Description: 'Hybrid inheritance mixes inheritance types, letting a class inherit traits from multiple parents to model complex real-world ties.'
Description: 'Hybrid inheritance combines multiple types of inheritance, allowing a class to inherit features from more than one parent and represent complex real-world relationships.'

Subjects:
- 'AI'
- 'Computer Science'
- 'Data Science'
- 'Machine Learning'
Tags:
- 'AI'
- 'Inheritance'
- 'Machine Learning'
- 'Python'
CatalogContent:
- 'learn-python-3'
- 'paths/computer-science'
---

**Hybrid inheritance** in Python combines multiple types of inheritance, such as single, multiple, and multilevel inheritance, within a single class hierarchy. It allows a class to inherit attributes and methods from multiple parent classes, often through a complex structure. Hybrid inheritance is useful for modeling real-world relationships where a class needs behaviors from various sources, but it requires careful design to avoid ambiguity, such as the diamond problem.

## Diagram

The following diagram shows a hybrid inheritance structure where a class inherits from multiple parent classes, combining multilevel and multiple inheritance:

```
System
/ \
/ \
Database API
\ /
\ /
App
```

- `System`: Base class with general functionality.
- `Database`: Inherits from `System`, adds data storage capabilities.
- `API`: Inherits from `System`, adds request handling capabilities.
- `App`: Inherits from both `Database` and `API`, combining their features.

Comment on lines +21 to +39
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

## Syntax

```python
# Base class attributes and methods
class BaseClass:

# Inherits from BaseClass
class DerivedClass1(BaseClass):

# Inherits from BaseClass
class DerivedClass2(BaseClass):

# Inherits from DerivedClass1 and DerivedClass2
class HybridClass(DerivedClass1, DerivedClass2):
```

- `BaseClass`: The top-level parent class.
- `DerivedClass1`, `DerivedClass2`: Intermediate classes inheriting from `BaseClass`.
- `HybridClass`: The class combining inheritance from multiple parent classes.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- `HybridClass`: The class combining inheritance from multiple parent classes.
- `HybridClass`: Inherits from both intermediate classes, forming a hybrid structure (mix of multilevel and multiple inheritance).

- Use commas in the class definition to specify multiple parent classes.
- Python’s Method Resolution Order (MRO) determines which parent class method is called in case of conflicts.
Comment on lines +59 to +60
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can be added in as a note


## Example

This example defines an `System` base class with a `process` method. `Database` and `API` inherit from `System`, adding `store` and `request` methods, respectively. `App` uses hybrid inheritance to inherit from both `Database` and `API`, combining their behaviors. The `describe` method in `App` calls methods from all parent classes, demonstrating access to inherited functionality.

```python
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
```python
```py

class System:
def process(self):
return "Processing data"

class Database(System):
def store(self):
return "Storing data"

class API(System):
def request(self):
return "Handling request"

class App(Database, API):
def describe(self):
return f"{self.process()}, {self.store()}, {self.request()}"

app = App()
print(app.describe())
Comment on lines +67 to +84
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
class System:
def process(self):
return "Processing data"
class Database(System):
def store(self):
return "Storing data"
class API(System):
def request(self):
return "Handling request"
class App(Database, API):
def describe(self):
return f"{self.process()}, {self.store()}, {self.request()}"
app = App()
print(app.describe())
class System:
def process(self):
return "Processing data"
class Database(System):
def store(self):
return "Storing data"
class API(System):
def request(self):
return "Handling request"
class App(Database, API):
def describe(self):
return f"{self.process()}, {self.store()}, {self.request()}"
app = App()
print(app.describe())

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

indentation should be two spaces

```

The output would be:

```python
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
```python
```shell

Processing data, Storing data, Handling request
```

## Codebyte

```codebyte/python
class System:
def process(self):
return "Processing data"

class Database(System):
def store(self):
return "Storing data"

class API(System):
def request(self):
return "Handling request"

class App(Database, API):
def describe(self):
return f"{self.process()}, {self.store()}, {self.request()}"

app = App()
print(app.describe())
Comment on lines +96 to +113
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
class System:
def process(self):
return "Processing data"
class Database(System):
def store(self):
return "Storing data"
class API(System):
def request(self):
return "Handling request"
class App(Database, API):
def describe(self):
return f"{self.process()}, {self.store()}, {self.request()}"
app = App()
print(app.describe())
class System:
def process(self):
return "Processing data"
class Database(System):
def store(self):
return "Storing data"
class API(System):
def request(self):
return "Handling request"
class App(Database, API):
def describe(self):
return f"{self.process()}, {self.store()}, {self.request()}"
app = App()
print(app.describe())

```

Hybrid inheritance can lead to the diamond problem, where a class inherits the same method from multiple parents. Python resolves this using the Method Resolution Order (MRO), accessible via **`ClassName.mro()`**. Use hybrid inheritance judiciously to avoid complex hierarchies that are hard to maintain. Ensure parent classes are designed to work together to prevent method conflicts.