Thanks to visit codestin.com
Credit goes to www.slideshare.net

SEQUENCE OVERLOADING
However, too much overloading may also backfire. 

VII. CUSTOMIZING CLASSES

PYTHON PROGRAMMING

Engr. Ranel O. Padon
PYTHON PROGRAMMING TOPICS
I

•Introduction to Python Programming

II

•Python Basics

III

•Controlling the Program Flow

IV

•Program Components: Functions, Classes, Packages, and Modules

V

•Sequences (List and Tuples), and Dictionaries

VI

•Object-Based Programming: Classes and Objects

VII

•Customizing Classes and Operator Overloading

VIII

•Object-Oriented Programming: Inheritance and Polymorphism

IX

•Randomization Algorithms

X

•Exception Handling and Assertions

XI

•String Manipulation and Regular Expressions

XII

•File Handling and Processing

XIII

•GUI Programming Using Tkinter
2
INTRODUCTION
Customization provides solutions for various needs.
INTRODUCTION

Customization has pros and cons.
INTRODUCTION

Special Methods: __init__ and __del__
__init__ creates objects
__del__ destroys objects

5
INTRODUCTION
The typical method-call notation is cumbersome for
mathematical classes.
>> polynomial1.add(polynomial2)
better or more natural way:

>> polynomial1 + polynomial2
This is called Operator Overloading.

6
INTRODUCTION

For faster development, reuse, modify, or extend
the built-in attributes, methods & operators of a Class.

7
INTRODUCTION

Python enables the programmer to overload most operators
to be sensitive to the context in which they are used.
>> print 2 + 3
>> print “Mang” + “Jose”
>> print 2 * 3
>> print “Mang” * 2

#prints “MangMang”

8
INTRODUCTION

The interpreter takes the appropriate action based
on the manner in which the operator is used.

9
INTRODUCTION

Some operators are overloaded frequently,
especially operators like + and —.
The job performed by overloaded operators
also can be performed by explicit method calls,
but operator notation is often clearer.

10
STRING REPRESENTATION

A Python class can define special method __str__,
to provide an informal (i.e., human-readable) string
representation of an object of the class.
__str__ is analogous to Java’s toString() method.

11
STRING REPRESENTATION

If a client program of the class contains the statement
print objectOfClass
Python calls the object’s __str__ method and outputs the
string returned by that method.

12
STRING REPRESENTATION

The raw face of an object.

13
STRING REPRESENTATION
default invocation
>> print halimawSaBanga
__main__.HalimawSaBanga instance at 0x0204E120

if __str__ is overriden
>> print halimawSaBanga
500-year-old na Halimaw natagpuan sa banga!

14
The Raw Faces of an Object

The __str__ Faces of an Object

15
STRING REPRESENTATION

16
STRING REPRESENTATION

17
ATTRIBUTE ACCESS

18
ATTRIBUTE ACCESS

19
ATTRIBUTE ACCESS

20
ATTRIBUTE ACCESS

21
ATTRIBUTE ACCESS

22
ATTRIBUTE ACCESS

23
OPERATOR OVERLOADING

Python does not allow new operators to be created, it does
allow most existing operators to be overloaded
when these operators are used with objects of a
programmer-defined type, the operators have meaning
appropriate to the new types.

24
Overloading: It’s about maximizing capabilities.
OPERATOR OVERLOADING

overloading contributes to the extensibility
of Python language

26
OPERATOR OVERLOADING Restrictions

1. precedence cannot be changed
2. arity cannot be changed (i.e., unary to binary)

27
OPERATOR OVERLOADING Restrictions

28
OPERATOR OVERLOADING Unary

A unary operator for a class is overloaded as a method
that takes only the object reference argument (self )

29
OPERATOR OVERLOADING Unary

30
OPERATOR OVERLOADING Binary

A binary operator or statement for a class is overloaded as a
method with two arguments: self and other.

31
OPERATOR OVERLOADING Rational

A Rational number is a fraction represented as a numerator
(top) and a denominator (bottom).

A rational number can be positive, negative or zero.
Class Rational’s interface includes a default constructor, string
representation method, overloaded abs function, equality
operators and several mathematical operators.

32
OPERATOR OVERLOADING Rational

33
OPERATOR OVERLOADING Binary

When overloading binary operator +, if y and z are objects of
class Rational, then y + z is treated as if y.__add__(z) had
been written, invoking the __add__ method.

34
OPERATOR OVERLOADING Binary

Usually, overloaded binary operator methods create and return
new objects of their corresponding class.

36
OPERATOR OVERLOADING Binary

What happens if we evaluate the expression y + z or the
statement y += z, and only y is an object of class Rational?
In both cases, z must be coerced (i.e., converted) to an
object of class Rational, before the appropriate operator
overloading method executes.

37
OPERATOR OVERLOADING Binary

38
OPERATOR OVERLOADING Binary

39
OPERATOR OVERLOADING Built-ins

A class also may define special methods that execute when
certain built-in functions are called on an object of the class.
For example, we may define special method __abs__
for class Rational, to execute when a program calls
abs(rationalObject) to compute the absolute value
of an object of that class.

40
OPERATOR OVERLOADING Built-ins

41
TYPE CONVERSION

Sometimes all the operations “stay within a type.”

For example, adding (concatenating) a string to a string
produces a string. But, it is often necessary to convert or
coerce data of one type to data of another type.

42
TYPE CONVERSION

Programmers can force conversions among built-in types
by calling the appropriate Python function, such as int or
float.

43
TYPE CONVERSION

But what about user-defined classes?

The interpreter cannot know how to convert among userdefined classes and built-in types.

44
TYPE CONVERSION

The programmer must specify how such conversions are to
occur with special methods that override the appropriate
Python functions.

45
TYPE CONVERSION

For example, a class can define special method __int__
that overloads the behavior of the call int( anObject ) to
return an integer representation of the object.

46
TYPE CONVERSION

47
TYPE CONVERSION

48
CASE STUDY: RATIONAL CLASS
Sample computations with Rational objects:

49
CASE STUDY: RATIONAL CLASS

function gcd() computes the greatest common divisor of two values.
Class Rational uses this function to simplify the rational number.
50
CASE STUDY: RATIONAL CLASS

51
CASE STUDY: RATIONAL CLASS

52
CASE STUDY: RATIONAL CLASS

53
CASE STUDY: RATIONAL CLASS

54
CASE STUDY: RATIONAL CLASS

55
CASE STUDY: RATIONAL CLASS

56
CASE STUDY: RATIONAL CLASS

57
CASE STUDY: RATIONAL CLASS

58
CASE STUDY: RATIONAL CLASS

59
CASE STUDY: RATIONAL CLASS

60
CASE STUDY: RATIONAL CLASS

61
CASE STUDY: RATIONAL CLASS

62
CASE STUDY: RATIONAL CLASS

63
CASE STUDY: RATIONAL CLASS

64
CASE STUDY: RATIONAL CLASS

65
CASE STUDY: RATIONAL CLASS

66
CASE STUDY: RATIONAL CLASS

67
END NOTES

Overloading is a powerful concept.
It allows the programmer to reuse/modify existing concepts
and operations.

68
…and enables the customization of classes.

SEQUENCE OVERLOADING
SEQUENCE OVERLOADING
However, too much overloading may also backfire. 
REFERENCES
 Deitel, Deitel, Liperi, and Wiedermann - Python: How to Program (2001).

 Disclaimer: Most of the images/information used here have no proper source citation, and I do
not claim ownership of these either. I don’t want to reinvent the wheel, and I just want to reuse
and reintegrate materials that I think are useful or cool, then present them in another light,
form, or perspective. Moreover, the images/information here are mainly used for
illustration/educational purposes only, in the spirit of openness of data, spreading light, and
empowering people with knowledge. 

71

Python Programming - VII. Customizing Classes and Operator Overloading