object-oriented programming python. oo paradigm - review three characteristics of oo languages...

23
Object-Oriented Programming Python

Upload: ryder-win

Post on 14-Dec-2015

212 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Object-Oriented Programming Python. OO Paradigm - Review Three Characteristics of OO Languages –Inheritance It isn’t necessary to build every class from

Object-Oriented Programming

Python

Page 2: Object-Oriented Programming Python. OO Paradigm - Review Three Characteristics of OO Languages –Inheritance It isn’t necessary to build every class from

OO Paradigm - Review

• Three Characteristics of OO Languages– Inheritance

• It isn’t necessary to build every class from scratch – attributes can be derived from other classes

– Polymorphism• The meaning of a method attribute depends on the object’s

class/subclass

– Encapsulation• Object behavior and object data are combined in a single

entity. Object interface defines interaction with the object; no need to know/understand the implementation.

Page 3: Object-Oriented Programming Python. OO Paradigm - Review Three Characteristics of OO Languages –Inheritance It isn’t necessary to build every class from

Polymorphism

• In computer science, polymorphism is a programming language feature that allows values of different data types to be handled using a uniform interface. http://en.wikipedia.org/wiki/Type_polymorphism; 3/29/2010

Page 4: Object-Oriented Programming Python. OO Paradigm - Review Three Characteristics of OO Languages –Inheritance It isn’t necessary to build every class from

Types of Polymorphism

• Polymorphism with virtual functions is sometimes called subtype polymorphism, inclusion polymorphism or pure polymorphism– This is the intended meaning when we say OO

programming implements polymorphism.

• Parametric polymorphism comes from templates or generic functions

• Overloading is a kind of ad-hoc polymorphism

Page 5: Object-Oriented Programming Python. OO Paradigm - Review Three Characteristics of OO Languages –Inheritance It isn’t necessary to build every class from

Polymorphism

• Polymorphism is a product of inheritance:– A method’s definition is determined by the class

of the object that invokes it.

• By re-defining a method in a subclass (giving it a new implementation), it is possible for a derived class to override the parent class definition.

Page 6: Object-Oriented Programming Python. OO Paradigm - Review Three Characteristics of OO Languages –Inheritance It isn’t necessary to build every class from

Polymorphism

• Virtual functions are those that can be overridden– C++: defined with key word virtual– Java & Python: every method is virtual by

default

• Difference between abstract and virtual functions:– Abstract methods aren’t defined

Page 7: Object-Oriented Programming Python. OO Paradigm - Review Three Characteristics of OO Languages –Inheritance It isn’t necessary to build every class from

Object Orientation in Python

• In Python, everything is an object – integers, strings, dictionaries, …

• Class objects are instantiated from user-defined classes, other objects are from language defined types.

Page 8: Object-Oriented Programming Python. OO Paradigm - Review Three Characteristics of OO Languages –Inheritance It isn’t necessary to build every class from

Python Classes

• Can be defined anywhere in the program

• All methods and instance variables are public, by default– The language provides “limited support” for

private identifiers (see section 9.6 in the documentation).

Page 9: Object-Oriented Programming Python. OO Paradigm - Review Three Characteristics of OO Languages –Inheritance It isn’t necessary to build every class from

Example

class MyClass:def set(self, value):

self.value = value def display(self):

print(self.value)

MyClass has two methods: set and display; and one attribute: value.

The class definition is terminated by a blank line.

Page 10: Object-Oriented Programming Python. OO Paradigm - Review Three Characteristics of OO Languages –Inheritance It isn’t necessary to build every class from

Example

The first parameter in each method refers to the object itself. Self is the traditional name of the parameter, but it can be anything. def set(self, value):

self.value = valueWhen the method is called, the self parameter

is omitted

Page 11: Object-Oriented Programming Python. OO Paradigm - Review Three Characteristics of OO Languages –Inheritance It isn’t necessary to build every class from

Example

Declare and assign value to a class variable:

>>> y = MyClass()>>> y.set(4)>>> y.display()4

>>> y.value

4

Page 12: Object-Oriented Programming Python. OO Paradigm - Review Three Characteristics of OO Languages –Inheritance It isn’t necessary to build every class from

Constructor - Example

Constructors are defined with the __init__ method.

Instead ofdef set(self, value):

usedef __init__(self, value):

Page 13: Object-Oriented Programming Python. OO Paradigm - Review Three Characteristics of OO Languages –Inheritance It isn’t necessary to build every class from

Constructors

def __init__(self):

self.value = 0

or

def __init__(self, thing):

self.value = thing

Usage: x = MyClass( ) sets x.value to 0

y = MyClass(5) sets y.value to 5

(default constructor and parameterized constructor)

Page 14: Object-Oriented Programming Python. OO Paradigm - Review Three Characteristics of OO Languages –Inheritance It isn’t necessary to build every class from

Class with Constructor

>>> class Complex:

def __init__(self, realp, imagp):

self.r = realp

self.i = imagp

>>> x = Complex(3.0, -4.5)

>>> x.r, x.i

(3.0, -4.5)

Page 15: Object-Oriented Programming Python. OO Paradigm - Review Three Characteristics of OO Languages –Inheritance It isn’t necessary to build every class from

Attributes (Data Members)

• Attributes are defined by an assignment statement, just as variables are defined (as opposed to being declared).

def set(self, value): self.value = value

• Can be defined in classes or instances of classes.• Attributes attached to classes belong to all

subclasses and instance objects, but attributes attached to instances only belong to that instance.

Page 16: Object-Oriented Programming Python. OO Paradigm - Review Three Characteristics of OO Languages –Inheritance It isn’t necessary to build every class from

Python Class Objects

• There is no new operator; to instantiate an object for a class, use functional notation: x = MyClass() y = MyClass()

• Each time a class is called, a new instance object is created. If the class has a constructor, you can use it here.

• Instance objects have data attributes and methods as defined in the class.

Page 17: Object-Oriented Programming Python. OO Paradigm - Review Three Characteristics of OO Languages –Inheritance It isn’t necessary to build every class from

Python Class Data Members

• Variables in Python are created when they are assigned to. – New data members (attributes) can be created

the same way; e.g.,x.counter = 1creates a new data attribute for the object x – but not for y.

• Beware – data attributes override method attributes with the same name!

Page 18: Object-Oriented Programming Python. OO Paradigm - Review Three Characteristics of OO Languages –Inheritance It isn’t necessary to build every class from

Information Hiding

• There is no foolproof way to enforce information hiding in Python, so there is no way to define a true abstract data type

• Everything is public by default; it is possible to partially circumvent the methods for defining private attributes.

Page 19: Object-Oriented Programming Python. OO Paradigm - Review Three Characteristics of OO Languages –Inheritance It isn’t necessary to build every class from

Inheritance

class DerivedClassName(BaseClassName): <statement-1> . . . <statement-N>

• If a requested attribute is not found in the derived class, it is searched for in the base class. This rule is applied recursively if the base class itself is derived from some other class.

Page 20: Object-Oriented Programming Python. OO Paradigm - Review Three Characteristics of OO Languages –Inheritance It isn’t necessary to build every class from

Multiple Inheritance

• Python supports multiple inheritance:

class DerivedClassName(B1, B2, B3): <statement-1> . . . <statement-N>

Page 21: Object-Oriented Programming Python. OO Paradigm - Review Three Characteristics of OO Languages –Inheritance It isn’t necessary to build every class from

Multiple Inheritance

• Resolving conflicts: (Given the expression object.attribute, find definition of attribute) – Depth-first, left-to-right search of the base

classes.– “Depth-first”: start at a leaf node in the

inheritance hierarchy (the object); search the object first, its class next, superclasses in L-R order as listed in the definition.

Page 22: Object-Oriented Programming Python. OO Paradigm - Review Three Characteristics of OO Languages –Inheritance It isn’t necessary to build every class from

B4.x.q

B1.a.b

B2.x

B3.y.b

I0.x

I1 I2

SUPERCLASSES

DERIVED CLASS

INSTANCES

Illustration of Single & Multiple Inheritance

I0.a and I0.b are defined in B1; I0.x is defined in I0I1.a, I1.b and I2.a, I2.b are defined in B1; I1.x & I2x are defined in B4I1.y or I2.y are defined in B3, and so forth.

Page 23: Object-Oriented Programming Python. OO Paradigm - Review Three Characteristics of OO Languages –Inheritance It isn’t necessary to build every class from

Python and OO Programming

See Section 9 in the Python tutorial for more information and examples.

Chapter 13, section 5 has several examples of Python classes.