How to Implement isinstance() in Odoo?
What is isinstance()?
isinstance(object, class_or_tuple) checks whether an object is an instance of a given class (or any subclass), or a tuple of classes.
- Returns True if the object matches; otherwise False.
- Preferred over type(obj) is SomeClass because it supports class inheritance.
✅ Syntax
isinstance(obj, Class) # Single class
isinstance(obj, (Class1, Class2)) # Any of multiple classes
Basic Python Example
isinstance(5, int) # ➝ True
isinstance("Odoo", (int, str)) # ➝ True
isinstance([], dict) # ➝ False
🧠 Realistic Odoo Examples
1. Verify Model Type Before Processing
def process_record(record):
if not isinstance(record, models.BaseModel):
raise ValueError("Expected an Odoo record.")
# Safe to access record methods/fields
2. Distinguish Between Recordsets and Single Records
from odoo import models
def ensure_single(recordset):
if not isinstance(recordset, models.Model):
raise ValueError("Invalid input")
if len(recordset) != 1:
raise ValueError("Expected exactly one record")
ensure_single(self.env['res.partner'].browse(1))
3. Handle Different Field Value Types
value = self.some_field
if isinstance(value, bool):
# handle boolean
elif isinstance(value, (int, float)):
# handle numeric
else:
# handle other types
✅ Summary Table
Use Case | isinstance() Benefits |
Model-type validation | Ensures robust method inputs |
Multi-class checks | Pass tuple for OR-type validation |
Supports inheritance | True for subclasses and base classes |
Use isinstance() to write safer, inheritance-aware code in your Odoo modules.