Transcript
Page 1: Python Programming - VII. Customizing Classes and Operator Overloading

SEQUENCE OVERLOADING

However, too much overloading may also backfire.

VII. CUSTOMIZING CLASSESEngr. Ranel O. Padon

PYTHON PROGRAMMING

Page 2: Python Programming - VII. Customizing Classes and Operator Overloading

PYTHON PROGRAMMING TOPICS

2

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

Page 3: Python Programming - VII. Customizing Classes and Operator Overloading

INTRODUCTION

Customization provides solutions for various needs.

Page 4: Python Programming - VII. Customizing Classes and Operator Overloading

INTRODUCTION

Customization has pros and cons.

Page 5: Python Programming - VII. Customizing Classes and Operator Overloading

INTRODUCTION

Special Methods: __init__ and __del__

__init__ creates objects

__del__ destroys objects

5

Page 6: Python Programming - VII. Customizing Classes and Operator Overloading

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

Page 7: Python Programming - VII. Customizing Classes and Operator Overloading

INTRODUCTION

For faster development, reuse, modify, or extend

the built-in attributes, methods & operators of a Class.

7

Page 8: Python Programming - VII. Customizing Classes and Operator Overloading

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

Page 9: Python Programming - VII. Customizing Classes and Operator Overloading

INTRODUCTION

The interpreter takes the appropriate action based

on the manner in which the operator is used.

9

Page 10: Python Programming - VII. Customizing Classes and Operator Overloading

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

Page 11: Python Programming - VII. Customizing Classes and Operator Overloading

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

Page 12: Python Programming - VII. Customizing Classes and Operator Overloading

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

Page 13: Python Programming - VII. Customizing Classes and Operator Overloading

STRING REPRESENTATION

13

The raw face of an object.

Page 14: Python Programming - VII. Customizing Classes and Operator Overloading

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

Page 15: Python Programming - VII. Customizing Classes and Operator Overloading

15

The __str__ Faces of an Object The Raw Faces of an Object

Page 16: Python Programming - VII. Customizing Classes and Operator Overloading

STRING REPRESENTATION

16

Page 17: Python Programming - VII. Customizing Classes and Operator Overloading

STRING REPRESENTATION

17

Page 18: Python Programming - VII. Customizing Classes and Operator Overloading

ATTRIBUTE ACCESS

18

Page 19: Python Programming - VII. Customizing Classes and Operator Overloading

ATTRIBUTE ACCESS

19

Page 20: Python Programming - VII. Customizing Classes and Operator Overloading

ATTRIBUTE ACCESS

20

Page 21: Python Programming - VII. Customizing Classes and Operator Overloading

ATTRIBUTE ACCESS

21

Page 22: Python Programming - VII. Customizing Classes and Operator Overloading

ATTRIBUTE ACCESS

22

Page 23: Python Programming - VII. Customizing Classes and Operator Overloading

ATTRIBUTE ACCESS

23

Page 24: Python Programming - VII. Customizing Classes and Operator Overloading

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

Page 25: Python Programming - VII. Customizing Classes and Operator Overloading

Overloading: It’s about maximizing capabilities.

Page 26: Python Programming - VII. Customizing Classes and Operator Overloading

OPERATOR OVERLOADING

overloading contributes to the extensibility

of Python language

26

Page 27: Python Programming - VII. Customizing Classes and Operator Overloading

OPERATOR OVERLOADING Restrictions

1. precedence cannot be changed

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

27

Page 28: Python Programming - VII. Customizing Classes and Operator Overloading

OPERATOR OVERLOADING Restrictions

28

Page 29: Python Programming - VII. Customizing Classes and Operator Overloading

OPERATOR OVERLOADING Unary

A unary operator for a class is overloaded as a method

that takes only the object reference argument (self )

29

Page 30: Python Programming - VII. Customizing Classes and Operator Overloading

OPERATOR OVERLOADING Unary

30

Page 31: Python Programming - VII. Customizing Classes and Operator Overloading

OPERATOR OVERLOADING Binary

A binary operator or statement for a class is overloaded as a

method with two arguments: self and other.

31

Page 32: Python Programming - VII. Customizing Classes and Operator Overloading

OPERATOR OVERLOADING Rational

32

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.

Page 33: Python Programming - VII. Customizing Classes and Operator Overloading

OPERATOR OVERLOADING Rational

33

Page 34: Python Programming - VII. Customizing Classes and Operator Overloading

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

Page 35: Python Programming - VII. Customizing Classes and Operator Overloading

OPERATOR OVERLOADING Binary

Usually, overloaded binary operator methods create and return

new objects of their corresponding class.

36

Page 36: Python Programming - VII. Customizing Classes and Operator Overloading

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

Page 37: Python Programming - VII. Customizing Classes and Operator Overloading

OPERATOR OVERLOADING Binary

38

Page 38: Python Programming - VII. Customizing Classes and Operator Overloading

OPERATOR OVERLOADING Binary

39

Page 39: Python Programming - VII. Customizing Classes and Operator Overloading

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

Page 40: Python Programming - VII. Customizing Classes and Operator Overloading

OPERATOR OVERLOADING Built-ins

41

Page 41: Python Programming - VII. Customizing Classes and Operator Overloading

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

Page 42: Python Programming - VII. Customizing Classes and Operator Overloading

TYPE CONVERSION

Programmers can force conversions among built-in types

by calling the appropriate Python function, such as int or

float.

43

Page 43: Python Programming - VII. Customizing Classes and Operator Overloading

TYPE CONVERSION

But what about user-defined classes?

The interpreter cannot know how to convert among user-

defined classes and built-in types.

44

Page 44: Python Programming - VII. Customizing Classes and Operator Overloading

TYPE CONVERSION

The programmer must specify how such conversions are to

occur with special methods that override the appropriate

Python functions.

45

Page 45: Python Programming - VII. Customizing Classes and Operator Overloading

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

Page 46: Python Programming - VII. Customizing Classes and Operator Overloading

TYPE CONVERSION

47

Page 47: Python Programming - VII. Customizing Classes and Operator Overloading

TYPE CONVERSION

48

Page 48: Python Programming - VII. Customizing Classes and Operator Overloading

CASE STUDY: RATIONAL CLASS

Sample computations with Rational objects:

49

Page 49: Python Programming - VII. Customizing Classes and Operator Overloading

CASE STUDY: RATIONAL CLASS

50

function gcd() computes the greatest common divisor of two values.

Class Rational uses this function to simplify the rational number.

Page 50: Python Programming - VII. Customizing Classes and Operator Overloading

CASE STUDY: RATIONAL CLASS

51

Page 51: Python Programming - VII. Customizing Classes and Operator Overloading

CASE STUDY: RATIONAL CLASS

52

Page 52: Python Programming - VII. Customizing Classes and Operator Overloading

CASE STUDY: RATIONAL CLASS

53

Page 53: Python Programming - VII. Customizing Classes and Operator Overloading

CASE STUDY: RATIONAL CLASS

54

Page 54: Python Programming - VII. Customizing Classes and Operator Overloading

CASE STUDY: RATIONAL CLASS

55

Page 55: Python Programming - VII. Customizing Classes and Operator Overloading

CASE STUDY: RATIONAL CLASS

56

Page 56: Python Programming - VII. Customizing Classes and Operator Overloading

CASE STUDY: RATIONAL CLASS

57

Page 57: Python Programming - VII. Customizing Classes and Operator Overloading

CASE STUDY: RATIONAL CLASS

58

Page 58: Python Programming - VII. Customizing Classes and Operator Overloading

CASE STUDY: RATIONAL CLASS

59

Page 59: Python Programming - VII. Customizing Classes and Operator Overloading

CASE STUDY: RATIONAL CLASS

60

Page 60: Python Programming - VII. Customizing Classes and Operator Overloading

CASE STUDY: RATIONAL CLASS

61

Page 61: Python Programming - VII. Customizing Classes and Operator Overloading

CASE STUDY: RATIONAL CLASS

62

Page 62: Python Programming - VII. Customizing Classes and Operator Overloading

CASE STUDY: RATIONAL CLASS

63

Page 63: Python Programming - VII. Customizing Classes and Operator Overloading

CASE STUDY: RATIONAL CLASS

64

Page 64: Python Programming - VII. Customizing Classes and Operator Overloading

CASE STUDY: RATIONAL CLASS

65

Page 65: Python Programming - VII. Customizing Classes and Operator Overloading

CASE STUDY: RATIONAL CLASS

66

Page 66: Python Programming - VII. Customizing Classes and Operator Overloading

CASE STUDY: RATIONAL CLASS

67

Page 67: Python Programming - VII. Customizing Classes and Operator Overloading

END NOTES

Overloading is a powerful concept.

It allows the programmer to reuse/modify existing concepts

and operations.

68

Page 68: Python Programming - VII. Customizing Classes and Operator Overloading

SEQUENCE OVERLOADING…and enables the customization of classes.

Page 69: Python Programming - VII. Customizing Classes and Operator Overloading

SEQUENCE OVERLOADING

However, too much overloading may also backfire.

Page 70: Python Programming - VII. Customizing Classes and Operator Overloading

REFERENCES

71

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.


Top Related