Python __int__ Method
Last modified April 8, 2025
This comprehensive guide explores Python's __int__ method, the
special method responsible for integer conversion. We'll cover basic usage,
custom implementations, numeric operations, and practical examples.
Basic Definitions
The __int__ method is a special method that defines how an object
should be converted to an integer. It is called by the built-in int()
function when converting an object to an integer.
Key characteristics: it takes no arguments (except self), must return an integer,
and enables objects to participate in integer contexts. It's part of Python's
numeric protocol alongside __float__ and __index__.
Basic __int__ Implementation
Here's a simple class implementing __int__ to demonstrate how
objects can define their own integer conversion behavior.
class Distance:
def __init__(self, meters):
self.meters = meters
def __int__(self):
return int(self.meters)
d = Distance(3.7)
print(int(d)) # Output: 3
This example shows a Distance class that converts to integer by truncating its
meter value. The int() function calls __int__ when
applied to a Distance instance.
The implementation simply delegates to Python's built-in int()
conversion of the meters attribute. This is a common pattern for wrapper classes.
Custom Numeric Conversion
__int__ can implement custom conversion logic when simple attribute
conversion isn't sufficient. Here we convert a temperature object.
class Celsius:
def __init__(self, temperature):
self.temperature = temperature
def __int__(self):
return round(self.temperature)
temp = Celsius(36.6)
print(int(temp)) # Output: 37
This Celsius class rounds the temperature when converting to integer. The
__int__ method provides control over how the conversion happens.
Rounding is often more appropriate than truncation for measurements where precision matters. The method can implement any conversion logic needed.
Currency Conversion Example
For financial applications, __int__ can convert currency objects
to their integer value in smallest units (like cents).
class Dollar:
def __init__(self, amount):
self.amount = amount
def __int__(self):
return int(self.amount * 100)
price = Dollar(4.99)
cents = int(price)
print(cents) # Output: 499
This Dollar class converts dollar amounts to cents when cast to integer. The
__int__ method multiplies by 100 before conversion.
Financial applications often need this type of conversion for precise arithmetic operations that avoid floating-point rounding errors.
Fraction to Integer Conversion
The __int__ method can implement mathematical operations during
conversion, like converting fractions to whole numbers.
class Fraction:
def __init__(self, numerator, denominator):
self.numerator = numerator
self.denominator = denominator
def __int__(self):
return self.numerator // self.denominator
half = Fraction(1, 2)
print(int(half)) # Output: 0
three_halves = Fraction(3, 2)
print(int(three_halves)) # Output: 1
This Fraction class implements integer division when converting to integer. The
// operator performs floor division to get the whole number part.
This matches Python's behavior for built-in numeric types where int()
truncates towards zero. The method could implement other rounding if needed.
Custom Object with Multiple Attributes
For complex objects, __int__ can combine multiple attributes into
a single integer value based on domain-specific logic.
class RGBColor:
def __init__(self, red, green, blue):
self.red = red
self.green = green
self.blue = blue
def __int__(self):
return (self.red << 16) | (self.green << 8) | self.blue
color = RGBColor(255, 128, 0)
print(int(color)) # Output: 16744448 (0xFF8000)
This RGBColor class combines three 8-bit color channels into a single 24-bit integer value. Bit shifting combines the components into the standard RGB format.
The __int__ method enables the color to be used in contexts
expecting a numeric color value, like some graphics libraries or databases.
Best Practices
- Return proper integers: Always return an actual int, not another type
- Implement related methods: Consider also implementing
__float__if applicable - Handle edge cases: Decide how to handle None or invalid states
- Document behavior: Clearly document the conversion logic
- Maintain consistency: Ensure
__int__matches other numeric methods
Source References
Author
List all Python tutorials.