SlideShare a Scribd company logo
Basic Inheritance
Damian Gordon
Basic Inheritance
• We have mentioned before that software re-use is considered
one of the golden rules of object-orientated programming, and
that generally speaking we will prefer to eliminate duplicated
code whenever possible.
• One mechanism to achieve this is inheritance.
Basic Inheritance
• Technically all classes are a sub-class of a class called Object,
so they all inherit from that class.
• The class called Object doesn’t really have many attributes
or methods, but they give all other classes their structure.
• If a class doesn’t explicitly inherit from any other class it
implicitly inherits from Object.
Basic Inheritance
• We can explicitly call the Object class as follows:
class MySubClass(object):
pass
# End Class.
Basic Inheritance
• This is inheritance in action.
• We call the object class, the superclass, and the object that
inherits into, the subclass.
• Python is great, because all you need to do to inherit from a
superclass is to include that classes’ name in the calling classes’
declaration.
Basic Inheritance
• Now let’s look at an example in practice.
• Let’s say we have a simple address book program that keeps
track of names and e-mail addresses. We’ll call the class
Contact, and this class keeps the list of all contacts, and
initialises the names and addresses for new contacts:
Basic Inheritance
class Contact:
contacts_list = []
def _ _init_ _(self, name, email):
self.name = name
self.email = email
Contact.contacts_list.append(self)
# End Init
# End Class
Basic Inheritance
class Contact:
contacts_list = []
def _ _init_ _(self, name, email):
self.name = name
self.email = email
Contact.contacts_list.append(self)
# End Init
# End Class
Because contacts_list is
declared here, there is only one
instance of this attribute , and it is
accessed as
Contacts.contact_list.
Basic Inheritance
class Contact:
contacts_list = []
def _ _init_ _(self, name, email):
self.name = name
self.email = email
Contact.contacts_list.append(self)
# End Init
# End Class
Because contacts_list is
declared here, there is only one
instance of this attribute , and it is
accessed as
Contacts.contact_list.
Append the newly instantiated
Contact to the contacts_list.
Basic Inheritance
name
__init__( )
email
contacts_list[ ]
Basic Inheritance
• Now let’s say that the contact list is for our company, and some
of our contacts are suppliers and some others are other staff
members in the company.
• If we wanted to add an order method, so that we can order
supplies off our suppliers, we better do it in such a way as we
cannot try to accidently order supplies off other staff
members. Here’s how we do it:
Basic Inheritance
class Supplier(Contact):
def order(self, order):
print(“The order will send ”
“’{}’ order to ‘{}’”.format(order,self.name))
# End order.
# End Class
Basic Inheritance
class Supplier(Contact):
def order(self, order):
print(“The order will send ”
“’{}’ order to ‘{}’”.format(order,self.name))
# End order.
# End Class
Create a new class called Supplier,
that has all the methods and
attributes of the Contact class. Now
add a new method called order.
Basic Inheritance
class Supplier(Contact):
def order(self, order):
print(“The order will send ”
“’{}’ order to ‘{}’”.format(order,self.name))
# End order.
# End Class
Create a new class called Supplier,
that has all the methods and
attributes of the Contact class. Now
add a new method called order.
Print out what was ordered from what
supplier.
Basic Inheritance
name
__init__( )
email
contacts_list[ ]
Basic Inheritance
name
__init__( )
email
contacts_list[ ]
order( )
Basic Inheritance
• Let’s run this, first we’ll declare some instances:
c1 = Contact("Tom StaffMember", "TomStaffMember@MyCompany.com")
c2 = Contact("Fred StaffMember", "FredStaffMember@MyCompany.com")
s1 = Supplier("Joe Supplier", "JoeSupplier@Supplies.com")
s2 = Supplier("John Supplier", "JohnSupplier@Supplies.com")
Basic Inheritance
• Now let’s check if that has been declared correctly:
print("Our Staff Members are:“, c1.name, " ", c2.name)
print("Their email addresses are:“, c1.email, " ", c2.email)
print("Our Suppliers are:“, s1.name, " ", s2.name)
print("Their email addresses are:“, s1.email, " ", s2.email)
Basic Inheritance
• We can order from suppliers:
s1.order("Bag of sweets")
s2.order("Boiled eggs")
Basic Inheritance
• We can order from suppliers:
s1.order("Bag of sweets")
s2.order("Boiled eggs")
The order will send our 'Bag of sweets' order to 'Joe Supplier'
The order will send our 'Boiled eggs' order to 'John Supplier'
Basic Inheritance
• But we can’t order from staff members (they don’t have the
contact method:
c1.order("Bag of sweets")
c2.order("Boiled eggs")
Basic Inheritance
• But we can’t order from staff members (they don’t have the
contact method:
c1.order("Bag of sweets")
c2.order("Boiled eggs")
Traceback (most recent call last):
File "C:/Users/damian.gordon/AppData/Local/Programs/Python/Python35-
32/Inheritance.py", line 64, in <module>
c1.order("Bag of sweets")
AttributeError: 'Contact' object has no attribute 'order'
name
__init__( )
email
contacts_list[ ]
name
__init__( )
email
contacts_list[ ]
order( )
Extending Built-Ins
Extending Built-Ins
• Let’s say we needed to add a new method that searches the
contacts_list for a particular name, where would we put
that method?
• It seems like something that might be better associated with
the list itself, so how would we do that?
Extending Built-Ins
class ContactList(list):
def search(self, name):
“Return any search hits”
matching_contacts = [ ]
for contact in self:
if name in contact.name:
matching_contacts.append(contact)
# Endif;
# Endfor;
return matching_contacts
# End Search
# End Class
Extending Built-Ins
class ContactList(list):
def search(self, name):
“Return any search hits”
matching_contacts = [ ]
for contact in self:
if name in contact.name:
matching_contacts.append(contact)
# Endif;
# Endfor;
return matching_contacts
# End Search
# End Class
This is a new class that
builds on the list type.
Extending Built-Ins
class ContactList(list):
def search(self, name):
“Return any search hits”
matching_contacts = [ ]
for contact in self:
if name in contact.name:
matching_contacts.append(contact)
# Endif;
# Endfor;
return matching_contacts
# End Search
# End Class
This is a new class that
builds on the list type.
Create a new list of
matching names.
Extending Built-Ins
class Contact(list):
contacts_list = ContactList()
def _ _init_ _(self, name, email):
self.name = name
self.email = email
self.contacts_list.append(self)
# End Init
# End Class
Extending Built-Ins
class Contact(list):
contacts_list = ContactList()
def _ _init_ _(self, name, email):
self.name = name
self.email = email
self.contacts_list.append(self)
# End Init
# End Class
Instead of declaring
contacts_list as a list we
declare it as a class that
inherits from list.
Extending Built-Ins
• Let’s run this, first we’ll declare some instances, and then do a
search:
c1 = Contact("Tom StaffMember", "TomStaffMember@MyCompany.com")
c2 = Contact("Fred StaffMember", "FredStaffMember@MyCompany.com")
c3 = Contact("Anne StaffMember", "AnneStaffMember@MyCompany.com")
SearchName = input("Who would you like to search for?n")
print([c.name for c in Contact.contacts_list.search(SearchName)])
Extending Built-Ins
• Let’s run this, first we’ll declare some instances, and then do a
search:
c1 = Contact("Tom StaffMember", "TomStaffMember@MyCompany.com")
c2 = Contact("Fred StaffMember", "FredStaffMember@MyCompany.com")
c3 = Contact("Anne StaffMember", "AnneStaffMember@MyCompany.com")
SearchName = input("Who would you like to search for?n")
print([c.name for c in Contact.contacts_list.search(SearchName)])
>>> Who would you like to search for?
Staff
['Tom StaffMember', 'Fred StaffMember', 'Anne StaffMember']
Overriding and super
Overriding and super
• So inheritance is used to add new behaviours, but what if we
want to change behaviours?
• Let’s look at the Supplier class again, and we want to
change how the order method works.
Overriding and super
• Here’s what we have so far:
class Supplier(Contact):
def order(self, order):
print("The order will send our "
"'{}' order to '{}'".format(order,self.name))
# End order.
# End Class
Overriding and super
• Here’s a new version:
class SupplierCheck(Supplier):
def order(self, order, balance):
if balance < 0:
# THEN
print("This customer is in debt.")
else:
print("The order will send our "
"'{}' order to '{}'".format(order,self.name))
# End order.
# End Class
Overriding and super
• Here’s a new version:
class SupplierCheck(Supplier):
def order(self, order, balance):
if balance < 0:
# THEN
print("This customer is in debt.")
else:
print("The order will send our "
"'{}' order to '{}'".format(order,self.name))
# End order.
# End Class
Overriding and super
• Here’s a new version:
class SupplierCheck(Supplier):
def order(self, order, balance):
if balance < 0:
# THEN
print("This customer is in debt.")
else:
print("The order will send our "
"'{}' order to '{}'".format(order,self.name))
# End order.
# End Class
The new class inherits from
the Supplier class. It is
therefore a subclass of it.
Overriding and super
• Here’s a new version:
class SupplierCheck(Supplier):
def order(self, order, balance):
if balance < 0:
# THEN
print("This customer is in debt.")
else:
print("The order will send our "
"'{}' order to '{}'".format(order,self.name))
# End order.
# End Class
The new class inherits from
the Supplier class. It is
therefore a subclass of it.
And it overrides the order
method to now explore the
new balance attribute.
Overriding and super
• We declare objects as follows:
s1 = Supplier("Joe Supplier", "JoeSupplier@Supplies.com")
s2 = Supplier("John Supplier", "JohnSupplier@Supplies.com")
s3 = SupplierCheck("Anne Supplier", "AnneSupplier@Supplies.com")
s4 = SupplierCheck("Mary Supplier", "MarySupplier@Supplies.com")
Overriding and super
• And when we call the new order method:
s1.order("Bag of sweets")
s2.order("Boiled eggs")
s3.order("Coffee", 23)
s4.order("Corn Flakes", -12)
Overriding and super
• And when we call the new order method:
s1.order("Bag of sweets")
s2.order("Boiled eggs")
s3.order("Coffee", 23)
s4.order("Corn Flakes", -12)
The order will send our 'Bag of sweets' order to 'Joe Supplier'
The order will send our 'Boiled eggs' order to 'John Supplier'
The order will send our 'Coffee' order to 'Anne Supplier'
This customer is in debt.
Overriding and super
• The only problem with this approach is that the superclass and
the subclass both have similar code in them concerning the
order method.
• So if at some point in the future we have to change that
common part of the method, we have to remember to change
it in two places.
• It is better if we can just have the similar code in one place.
Overriding and super
• We can do this using the super( ) class.
• The super( ) class calls the superclass method from the
subclass.
• Let’s look at how we had it:
Overriding and super
• Here’s overridng:
class SupplierCheck(Supplier):
def order(self, order, balance):
if balance < 0:
# THEN
print("This customer is in debt.")
else:
print("The order will send our "
"'{}' order to '{}'".format(order,self.name))
# End order.
# End Class
Overriding and super
• Here’s super:
class SupplierCheck(Supplier):
def order(self, order, balance):
if balance < 0:
# THEN
print("This customer is in debt.")
else:
super().order(order)
# End order.
# End Class
Overriding and super
• Here’s super:
class SupplierCheck(Supplier):
def order(self, order, balance):
if balance < 0:
# THEN
print("This customer is in debt.")
else:
super().order(order)
# End order.
# End Class
Call the order method in the
superclass of
SupplierCheck, so call
Supplier.order(order).
etc.
Ad

Recommended

Object oriented programming in python
Object oriented programming in python
baabtra.com - No. 1 supplier of quality freshers
 
Python programming : Classes objects
Python programming : Classes objects
Emertxe Information Technologies Pvt Ltd
 
Python Modules
Python Modules
Nitin Reddy Katkam
 
Java keywords
Java keywords
Ravi_Kant_Sahu
 
Python: Modules and Packages
Python: Modules and Packages
Damian T. Gordon
 
Python-Inheritance.pptx
Python-Inheritance.pptx
Karudaiyar Ganapathy
 
Chapter 07 inheritance
Chapter 07 inheritance
Praveen M Jigajinni
 
Python : Functions
Python : Functions
Emertxe Information Technologies Pvt Ltd
 
Member Function in C++
Member Function in C++
NikitaKaur10
 
Python Data Structures and Algorithms.pptx
Python Data Structures and Algorithms.pptx
ShreyasLawand
 
String, string builder, string buffer
String, string builder, string buffer
SSN College of Engineering, Kalavakkam
 
String and string buffer
String and string buffer
kamal kotecha
 
What is Python Lambda Function? Python Tutorial | Edureka
What is Python Lambda Function? Python Tutorial | Edureka
Edureka!
 
Variables in python
Variables in python
Jaya Kumari
 
Inheritance in java
Inheritance in java
Lovely Professional University
 
Python programming : Inheritance and polymorphism
Python programming : Inheritance and polymorphism
Emertxe Information Technologies Pvt Ltd
 
Packages In Python Tutorial
Packages In Python Tutorial
Simplilearn
 
standard template library(STL) in C++
standard template library(STL) in C++
•sreejith •sree
 
Java interfaces
Java interfaces
Raja Sekhar
 
Java string handling
Java string handling
Salman Khan
 
Chapter 05 classes and objects
Chapter 05 classes and objects
Praveen M Jigajinni
 
List in Python
List in Python
Sharath Ankrajegowda
 
Operator Overloading In Python
Operator Overloading In Python
Simplilearn
 
Polymorphism in java
Polymorphism in java
Elizabeth alexander
 
Introduction to oop
Introduction to oop
colleges
 
Interface in java
Interface in java
PhD Research Scholar
 
Exception Handling in JAVA
Exception Handling in JAVA
SURIT DATTA
 
Python array
Python array
Arnab Chakraborty
 
Python: Design Patterns
Python: Design Patterns
Damian T. Gordon
 
Python: Third-Party Libraries
Python: Third-Party Libraries
Damian T. Gordon
 

More Related Content

What's hot (20)

Member Function in C++
Member Function in C++
NikitaKaur10
 
Python Data Structures and Algorithms.pptx
Python Data Structures and Algorithms.pptx
ShreyasLawand
 
String, string builder, string buffer
String, string builder, string buffer
SSN College of Engineering, Kalavakkam
 
String and string buffer
String and string buffer
kamal kotecha
 
What is Python Lambda Function? Python Tutorial | Edureka
What is Python Lambda Function? Python Tutorial | Edureka
Edureka!
 
Variables in python
Variables in python
Jaya Kumari
 
Inheritance in java
Inheritance in java
Lovely Professional University
 
Python programming : Inheritance and polymorphism
Python programming : Inheritance and polymorphism
Emertxe Information Technologies Pvt Ltd
 
Packages In Python Tutorial
Packages In Python Tutorial
Simplilearn
 
standard template library(STL) in C++
standard template library(STL) in C++
•sreejith •sree
 
Java interfaces
Java interfaces
Raja Sekhar
 
Java string handling
Java string handling
Salman Khan
 
Chapter 05 classes and objects
Chapter 05 classes and objects
Praveen M Jigajinni
 
List in Python
List in Python
Sharath Ankrajegowda
 
Operator Overloading In Python
Operator Overloading In Python
Simplilearn
 
Polymorphism in java
Polymorphism in java
Elizabeth alexander
 
Introduction to oop
Introduction to oop
colleges
 
Interface in java
Interface in java
PhD Research Scholar
 
Exception Handling in JAVA
Exception Handling in JAVA
SURIT DATTA
 
Python array
Python array
Arnab Chakraborty
 

Viewers also liked (12)

Python: Design Patterns
Python: Design Patterns
Damian T. Gordon
 
Python: Third-Party Libraries
Python: Third-Party Libraries
Damian T. Gordon
 
Python: The Iterator Pattern
Python: The Iterator Pattern
Damian T. Gordon
 
Object-Orientated Design
Object-Orientated Design
Damian T. Gordon
 
Python: Multiple Inheritance
Python: Multiple Inheritance
Damian T. Gordon
 
Introduction to Python programming
Introduction to Python programming
Damian T. Gordon
 
Python: Access Control
Python: Access Control
Damian T. Gordon
 
Python: Manager Objects
Python: Manager Objects
Damian T. Gordon
 
Creating Objects in Python
Creating Objects in Python
Damian T. Gordon
 
Python: Polymorphism
Python: Polymorphism
Damian T. Gordon
 
Python: Migrating from Procedural to Object-Oriented Programming
Python: Migrating from Procedural to Object-Oriented Programming
Damian T. Gordon
 
The Extreme Programming (XP) Model
The Extreme Programming (XP) Model
Damian T. Gordon
 
Python: Third-Party Libraries
Python: Third-Party Libraries
Damian T. Gordon
 
Python: The Iterator Pattern
Python: The Iterator Pattern
Damian T. Gordon
 
Python: Multiple Inheritance
Python: Multiple Inheritance
Damian T. Gordon
 
Introduction to Python programming
Introduction to Python programming
Damian T. Gordon
 
Creating Objects in Python
Creating Objects in Python
Damian T. Gordon
 
Python: Migrating from Procedural to Object-Oriented Programming
Python: Migrating from Procedural to Object-Oriented Programming
Damian T. Gordon
 
The Extreme Programming (XP) Model
The Extreme Programming (XP) Model
Damian T. Gordon
 
Ad

Similar to Python: Basic Inheritance (20)

Python advance
Python advance
Mukul Kirti Verma
 
All about python Inheritance.python codingdf
All about python Inheritance.python codingdf
adipapai181023
 
Object oriented Programning Lanuagues in text format.
Object oriented Programning Lanuagues in text format.
SravaniSravani53
 
Inheritance
Inheritance
JayanthiNeelampalli
 
Lecture on Python OP concepts of Polymorpysim and Inheritance.pdf
Lecture on Python OP concepts of Polymorpysim and Inheritance.pdf
waqaskhan428678
 
Unit_3_2_INHERITANUnit_3_2_INHERITANCE.pdfCE.pdf
Unit_3_2_INHERITANUnit_3_2_INHERITANCE.pdfCE.pdf
RutviBaraiya
 
Python_Object_Oriented_Programming.pptx
Python_Object_Oriented_Programming.pptx
Koteswari Kasireddy
 
Class inheritance 13 session - SHAN
Class inheritance 13 session - SHAN
Navaneethan Naveen
 
Class inheritance
Class inheritance
Giritharan V
 
Object-Oriented Programming (OO) in pythonP) in python.pptx
Object-Oriented Programming (OO) in pythonP) in python.pptx
institute of Geoinformatics and Earth Observation at PMAS ARID Agriculture University of Rawalpindi
 
Object Oriented Programming.pptx
Object Oriented Programming.pptx
SAICHARANREDDYN
 
601109769-Pythondyttcjycvuv-Inheritance .pptx
601109769-Pythondyttcjycvuv-Inheritance .pptx
srinivasa gowda
 
Python programming computer science and engineering
Python programming computer science and engineering
IRAH34
 
Inheritance_Polymorphism_Overloading_overriding.pptx
Inheritance_Polymorphism_Overloading_overriding.pptx
MalligaarjunanN
 
object oriented programming(PYTHON)
object oriented programming(PYTHON)
Jyoti shukla
 
Me, my self and IPython
Me, my self and IPython
Joel Klinger
 
Object Oriented Programming in Python
Object Oriented Programming in Python
Pradeep Kumar
 
Object_Oriented_Programming_Unit3.pdf
Object_Oriented_Programming_Unit3.pdf
Koteswari Kasireddy
 
Class and Objects in python programming.pptx
Class and Objects in python programming.pptx
Rajtherock
 
arthimetic operator,classes,objects,instant
arthimetic operator,classes,objects,instant
ssuser77162c
 
All about python Inheritance.python codingdf
All about python Inheritance.python codingdf
adipapai181023
 
Object oriented Programning Lanuagues in text format.
Object oriented Programning Lanuagues in text format.
SravaniSravani53
 
Lecture on Python OP concepts of Polymorpysim and Inheritance.pdf
Lecture on Python OP concepts of Polymorpysim and Inheritance.pdf
waqaskhan428678
 
Unit_3_2_INHERITANUnit_3_2_INHERITANCE.pdfCE.pdf
Unit_3_2_INHERITANUnit_3_2_INHERITANCE.pdfCE.pdf
RutviBaraiya
 
Python_Object_Oriented_Programming.pptx
Python_Object_Oriented_Programming.pptx
Koteswari Kasireddy
 
Class inheritance 13 session - SHAN
Class inheritance 13 session - SHAN
Navaneethan Naveen
 
Object Oriented Programming.pptx
Object Oriented Programming.pptx
SAICHARANREDDYN
 
601109769-Pythondyttcjycvuv-Inheritance .pptx
601109769-Pythondyttcjycvuv-Inheritance .pptx
srinivasa gowda
 
Python programming computer science and engineering
Python programming computer science and engineering
IRAH34
 
Inheritance_Polymorphism_Overloading_overriding.pptx
Inheritance_Polymorphism_Overloading_overriding.pptx
MalligaarjunanN
 
object oriented programming(PYTHON)
object oriented programming(PYTHON)
Jyoti shukla
 
Me, my self and IPython
Me, my self and IPython
Joel Klinger
 
Object Oriented Programming in Python
Object Oriented Programming in Python
Pradeep Kumar
 
Object_Oriented_Programming_Unit3.pdf
Object_Oriented_Programming_Unit3.pdf
Koteswari Kasireddy
 
Class and Objects in python programming.pptx
Class and Objects in python programming.pptx
Rajtherock
 
arthimetic operator,classes,objects,instant
arthimetic operator,classes,objects,instant
ssuser77162c
 
Ad

More from Damian T. Gordon (20)

Introduction to Prompts and Prompt Engineering
Introduction to Prompts and Prompt Engineering
Damian T. Gordon
 
Introduction to Vibe Coding and Vibe Engineering
Introduction to Vibe Coding and Vibe Engineering
Damian T. Gordon
 
TRIZ: Theory of Inventive Problem Solving
TRIZ: Theory of Inventive Problem Solving
Damian T. Gordon
 
Some Ethical Considerations of AI and GenAI
Some Ethical Considerations of AI and GenAI
Damian T. Gordon
 
Some Common Errors that Generative AI Produces
Some Common Errors that Generative AI Produces
Damian T. Gordon
 
The Use of Data and Datasets in Data Science
The Use of Data and Datasets in Data Science
Damian T. Gordon
 
A History of Different Versions of Microsoft Windows
A History of Different Versions of Microsoft Windows
Damian T. Gordon
 
Writing an Abstract: A Question-based Approach
Writing an Abstract: A Question-based Approach
Damian T. Gordon
 
Using GenAI for Universal Design for Learning
Using GenAI for Universal Design for Learning
Damian T. Gordon
 
A CheckSheet for Inclusive Software Design
A CheckSheet for Inclusive Software Design
Damian T. Gordon
 
A History of Versions of the Apple MacOS
A History of Versions of the Apple MacOS
Damian T. Gordon
 
68 Ways that Data Science and AI can help address the UN Sustainability Goals
68 Ways that Data Science and AI can help address the UN Sustainability Goals
Damian T. Gordon
 
Copyright and Creative Commons Considerations
Copyright and Creative Commons Considerations
Damian T. Gordon
 
Exam Preparation: Some Ideas and Suggestions
Exam Preparation: Some Ideas and Suggestions
Damian T. Gordon
 
Studying and Notetaking: Some Suggestions
Studying and Notetaking: Some Suggestions
Damian T. Gordon
 
The Growth Mindset: Explanations and Activities
The Growth Mindset: Explanations and Activities
Damian T. Gordon
 
Hyperparameter Tuning in Neural Networks
Hyperparameter Tuning in Neural Networks
Damian T. Gordon
 
Early 20th Century Modern Art: Movements and Artists
Early 20th Century Modern Art: Movements and Artists
Damian T. Gordon
 
An Introduction to Generative Artificial Intelligence
An Introduction to Generative Artificial Intelligence
Damian T. Gordon
 
An Introduction to Green Computing with a fun quiz.
An Introduction to Green Computing with a fun quiz.
Damian T. Gordon
 
Introduction to Prompts and Prompt Engineering
Introduction to Prompts and Prompt Engineering
Damian T. Gordon
 
Introduction to Vibe Coding and Vibe Engineering
Introduction to Vibe Coding and Vibe Engineering
Damian T. Gordon
 
TRIZ: Theory of Inventive Problem Solving
TRIZ: Theory of Inventive Problem Solving
Damian T. Gordon
 
Some Ethical Considerations of AI and GenAI
Some Ethical Considerations of AI and GenAI
Damian T. Gordon
 
Some Common Errors that Generative AI Produces
Some Common Errors that Generative AI Produces
Damian T. Gordon
 
The Use of Data and Datasets in Data Science
The Use of Data and Datasets in Data Science
Damian T. Gordon
 
A History of Different Versions of Microsoft Windows
A History of Different Versions of Microsoft Windows
Damian T. Gordon
 
Writing an Abstract: A Question-based Approach
Writing an Abstract: A Question-based Approach
Damian T. Gordon
 
Using GenAI for Universal Design for Learning
Using GenAI for Universal Design for Learning
Damian T. Gordon
 
A CheckSheet for Inclusive Software Design
A CheckSheet for Inclusive Software Design
Damian T. Gordon
 
A History of Versions of the Apple MacOS
A History of Versions of the Apple MacOS
Damian T. Gordon
 
68 Ways that Data Science and AI can help address the UN Sustainability Goals
68 Ways that Data Science and AI can help address the UN Sustainability Goals
Damian T. Gordon
 
Copyright and Creative Commons Considerations
Copyright and Creative Commons Considerations
Damian T. Gordon
 
Exam Preparation: Some Ideas and Suggestions
Exam Preparation: Some Ideas and Suggestions
Damian T. Gordon
 
Studying and Notetaking: Some Suggestions
Studying and Notetaking: Some Suggestions
Damian T. Gordon
 
The Growth Mindset: Explanations and Activities
The Growth Mindset: Explanations and Activities
Damian T. Gordon
 
Hyperparameter Tuning in Neural Networks
Hyperparameter Tuning in Neural Networks
Damian T. Gordon
 
Early 20th Century Modern Art: Movements and Artists
Early 20th Century Modern Art: Movements and Artists
Damian T. Gordon
 
An Introduction to Generative Artificial Intelligence
An Introduction to Generative Artificial Intelligence
Damian T. Gordon
 
An Introduction to Green Computing with a fun quiz.
An Introduction to Green Computing with a fun quiz.
Damian T. Gordon
 

Recently uploaded (20)

English 3 Quarter 1_LEwithLAS_Week 1.pdf
English 3 Quarter 1_LEwithLAS_Week 1.pdf
DeAsisAlyanajaneH
 
VCE Literature Section A Exam Response Guide
VCE Literature Section A Exam Response Guide
jpinnuck
 
Plate Tectonic Boundaries and Continental Drift Theory
Plate Tectonic Boundaries and Continental Drift Theory
Marie
 
IIT KGP Quiz Week 2024 Sports Quiz (Prelims + Finals)
IIT KGP Quiz Week 2024 Sports Quiz (Prelims + Finals)
IIT Kharagpur Quiz Club
 
How payment terms are configured in Odoo 18
How payment terms are configured in Odoo 18
Celine George
 
THE PSYCHOANALYTIC OF THE BLACK CAT BY EDGAR ALLAN POE (1).pdf
THE PSYCHOANALYTIC OF THE BLACK CAT BY EDGAR ALLAN POE (1).pdf
nabilahk908
 
2025 June Year 9 Presentation: Subject selection.pptx
2025 June Year 9 Presentation: Subject selection.pptx
mansk2
 
LAZY SUNDAY QUIZ "A GENERAL QUIZ" JUNE 2025 SMC QUIZ CLUB, SILCHAR MEDICAL CO...
LAZY SUNDAY QUIZ "A GENERAL QUIZ" JUNE 2025 SMC QUIZ CLUB, SILCHAR MEDICAL CO...
Ultimatewinner0342
 
Q1_ENGLISH_PPT_WEEK 1 power point grade 3 Quarter 1 week 1
Q1_ENGLISH_PPT_WEEK 1 power point grade 3 Quarter 1 week 1
jutaydeonne
 
SCHIZOPHRENIA OTHER PSYCHOTIC DISORDER LIKE Persistent delusion/Capgras syndr...
SCHIZOPHRENIA OTHER PSYCHOTIC DISORDER LIKE Persistent delusion/Capgras syndr...
parmarjuli1412
 
How to use search fetch method in Odoo 18
How to use search fetch method in Odoo 18
Celine George
 
Values Education 10 Quarter 1 Module .pptx
Values Education 10 Quarter 1 Module .pptx
JBPafin
 
Paper 108 | Thoreau’s Influence on Gandhi: The Evolution of Civil Disobedience
Paper 108 | Thoreau’s Influence on Gandhi: The Evolution of Civil Disobedience
Rajdeep Bavaliya
 
Great Governors' Send-Off Quiz 2025 Prelims IIT KGP
Great Governors' Send-Off Quiz 2025 Prelims IIT KGP
IIT Kharagpur Quiz Club
 
HistoPathology Ppt. Arshita Gupta for Diploma
HistoPathology Ppt. Arshita Gupta for Diploma
arshitagupta674
 
How to Customize Quotation Layouts in Odoo 18
How to Customize Quotation Layouts in Odoo 18
Celine George
 
INDUCTIVE EFFECT slide for first prof pharamacy students
INDUCTIVE EFFECT slide for first prof pharamacy students
SHABNAM FAIZ
 
ENGLISH_Q1_W1 PowerPoint grade 3 quarter 1 week 1
ENGLISH_Q1_W1 PowerPoint grade 3 quarter 1 week 1
jutaydeonne
 
Romanticism in Love and Sacrifice An Analysis of Oscar Wilde’s The Nightingal...
Romanticism in Love and Sacrifice An Analysis of Oscar Wilde’s The Nightingal...
KaryanaTantri21
 
Intellectual Property Right (Jurisprudence).pptx
Intellectual Property Right (Jurisprudence).pptx
Vishal Chanalia
 
English 3 Quarter 1_LEwithLAS_Week 1.pdf
English 3 Quarter 1_LEwithLAS_Week 1.pdf
DeAsisAlyanajaneH
 
VCE Literature Section A Exam Response Guide
VCE Literature Section A Exam Response Guide
jpinnuck
 
Plate Tectonic Boundaries and Continental Drift Theory
Plate Tectonic Boundaries and Continental Drift Theory
Marie
 
IIT KGP Quiz Week 2024 Sports Quiz (Prelims + Finals)
IIT KGP Quiz Week 2024 Sports Quiz (Prelims + Finals)
IIT Kharagpur Quiz Club
 
How payment terms are configured in Odoo 18
How payment terms are configured in Odoo 18
Celine George
 
THE PSYCHOANALYTIC OF THE BLACK CAT BY EDGAR ALLAN POE (1).pdf
THE PSYCHOANALYTIC OF THE BLACK CAT BY EDGAR ALLAN POE (1).pdf
nabilahk908
 
2025 June Year 9 Presentation: Subject selection.pptx
2025 June Year 9 Presentation: Subject selection.pptx
mansk2
 
LAZY SUNDAY QUIZ "A GENERAL QUIZ" JUNE 2025 SMC QUIZ CLUB, SILCHAR MEDICAL CO...
LAZY SUNDAY QUIZ "A GENERAL QUIZ" JUNE 2025 SMC QUIZ CLUB, SILCHAR MEDICAL CO...
Ultimatewinner0342
 
Q1_ENGLISH_PPT_WEEK 1 power point grade 3 Quarter 1 week 1
Q1_ENGLISH_PPT_WEEK 1 power point grade 3 Quarter 1 week 1
jutaydeonne
 
SCHIZOPHRENIA OTHER PSYCHOTIC DISORDER LIKE Persistent delusion/Capgras syndr...
SCHIZOPHRENIA OTHER PSYCHOTIC DISORDER LIKE Persistent delusion/Capgras syndr...
parmarjuli1412
 
How to use search fetch method in Odoo 18
How to use search fetch method in Odoo 18
Celine George
 
Values Education 10 Quarter 1 Module .pptx
Values Education 10 Quarter 1 Module .pptx
JBPafin
 
Paper 108 | Thoreau’s Influence on Gandhi: The Evolution of Civil Disobedience
Paper 108 | Thoreau’s Influence on Gandhi: The Evolution of Civil Disobedience
Rajdeep Bavaliya
 
Great Governors' Send-Off Quiz 2025 Prelims IIT KGP
Great Governors' Send-Off Quiz 2025 Prelims IIT KGP
IIT Kharagpur Quiz Club
 
HistoPathology Ppt. Arshita Gupta for Diploma
HistoPathology Ppt. Arshita Gupta for Diploma
arshitagupta674
 
How to Customize Quotation Layouts in Odoo 18
How to Customize Quotation Layouts in Odoo 18
Celine George
 
INDUCTIVE EFFECT slide for first prof pharamacy students
INDUCTIVE EFFECT slide for first prof pharamacy students
SHABNAM FAIZ
 
ENGLISH_Q1_W1 PowerPoint grade 3 quarter 1 week 1
ENGLISH_Q1_W1 PowerPoint grade 3 quarter 1 week 1
jutaydeonne
 
Romanticism in Love and Sacrifice An Analysis of Oscar Wilde’s The Nightingal...
Romanticism in Love and Sacrifice An Analysis of Oscar Wilde’s The Nightingal...
KaryanaTantri21
 
Intellectual Property Right (Jurisprudence).pptx
Intellectual Property Right (Jurisprudence).pptx
Vishal Chanalia
 

Python: Basic Inheritance

  • 2. Basic Inheritance • We have mentioned before that software re-use is considered one of the golden rules of object-orientated programming, and that generally speaking we will prefer to eliminate duplicated code whenever possible. • One mechanism to achieve this is inheritance.
  • 3. Basic Inheritance • Technically all classes are a sub-class of a class called Object, so they all inherit from that class. • The class called Object doesn’t really have many attributes or methods, but they give all other classes their structure. • If a class doesn’t explicitly inherit from any other class it implicitly inherits from Object.
  • 4. Basic Inheritance • We can explicitly call the Object class as follows: class MySubClass(object): pass # End Class.
  • 5. Basic Inheritance • This is inheritance in action. • We call the object class, the superclass, and the object that inherits into, the subclass. • Python is great, because all you need to do to inherit from a superclass is to include that classes’ name in the calling classes’ declaration.
  • 6. Basic Inheritance • Now let’s look at an example in practice. • Let’s say we have a simple address book program that keeps track of names and e-mail addresses. We’ll call the class Contact, and this class keeps the list of all contacts, and initialises the names and addresses for new contacts:
  • 7. Basic Inheritance class Contact: contacts_list = [] def _ _init_ _(self, name, email): self.name = name self.email = email Contact.contacts_list.append(self) # End Init # End Class
  • 8. Basic Inheritance class Contact: contacts_list = [] def _ _init_ _(self, name, email): self.name = name self.email = email Contact.contacts_list.append(self) # End Init # End Class Because contacts_list is declared here, there is only one instance of this attribute , and it is accessed as Contacts.contact_list.
  • 9. Basic Inheritance class Contact: contacts_list = [] def _ _init_ _(self, name, email): self.name = name self.email = email Contact.contacts_list.append(self) # End Init # End Class Because contacts_list is declared here, there is only one instance of this attribute , and it is accessed as Contacts.contact_list. Append the newly instantiated Contact to the contacts_list.
  • 11. Basic Inheritance • Now let’s say that the contact list is for our company, and some of our contacts are suppliers and some others are other staff members in the company. • If we wanted to add an order method, so that we can order supplies off our suppliers, we better do it in such a way as we cannot try to accidently order supplies off other staff members. Here’s how we do it:
  • 12. Basic Inheritance class Supplier(Contact): def order(self, order): print(“The order will send ” “’{}’ order to ‘{}’”.format(order,self.name)) # End order. # End Class
  • 13. Basic Inheritance class Supplier(Contact): def order(self, order): print(“The order will send ” “’{}’ order to ‘{}’”.format(order,self.name)) # End order. # End Class Create a new class called Supplier, that has all the methods and attributes of the Contact class. Now add a new method called order.
  • 14. Basic Inheritance class Supplier(Contact): def order(self, order): print(“The order will send ” “’{}’ order to ‘{}’”.format(order,self.name)) # End order. # End Class Create a new class called Supplier, that has all the methods and attributes of the Contact class. Now add a new method called order. Print out what was ordered from what supplier.
  • 17. Basic Inheritance • Let’s run this, first we’ll declare some instances: c1 = Contact("Tom StaffMember", "[email protected]") c2 = Contact("Fred StaffMember", "[email protected]") s1 = Supplier("Joe Supplier", "[email protected]") s2 = Supplier("John Supplier", "[email protected]")
  • 18. Basic Inheritance • Now let’s check if that has been declared correctly: print("Our Staff Members are:“, c1.name, " ", c2.name) print("Their email addresses are:“, c1.email, " ", c2.email) print("Our Suppliers are:“, s1.name, " ", s2.name) print("Their email addresses are:“, s1.email, " ", s2.email)
  • 19. Basic Inheritance • We can order from suppliers: s1.order("Bag of sweets") s2.order("Boiled eggs")
  • 20. Basic Inheritance • We can order from suppliers: s1.order("Bag of sweets") s2.order("Boiled eggs") The order will send our 'Bag of sweets' order to 'Joe Supplier' The order will send our 'Boiled eggs' order to 'John Supplier'
  • 21. Basic Inheritance • But we can’t order from staff members (they don’t have the contact method: c1.order("Bag of sweets") c2.order("Boiled eggs")
  • 22. Basic Inheritance • But we can’t order from staff members (they don’t have the contact method: c1.order("Bag of sweets") c2.order("Boiled eggs") Traceback (most recent call last): File "C:/Users/damian.gordon/AppData/Local/Programs/Python/Python35- 32/Inheritance.py", line 64, in <module> c1.order("Bag of sweets") AttributeError: 'Contact' object has no attribute 'order'
  • 23. name __init__( ) email contacts_list[ ] name __init__( ) email contacts_list[ ] order( )
  • 25. Extending Built-Ins • Let’s say we needed to add a new method that searches the contacts_list for a particular name, where would we put that method? • It seems like something that might be better associated with the list itself, so how would we do that?
  • 26. Extending Built-Ins class ContactList(list): def search(self, name): “Return any search hits” matching_contacts = [ ] for contact in self: if name in contact.name: matching_contacts.append(contact) # Endif; # Endfor; return matching_contacts # End Search # End Class
  • 27. Extending Built-Ins class ContactList(list): def search(self, name): “Return any search hits” matching_contacts = [ ] for contact in self: if name in contact.name: matching_contacts.append(contact) # Endif; # Endfor; return matching_contacts # End Search # End Class This is a new class that builds on the list type.
  • 28. Extending Built-Ins class ContactList(list): def search(self, name): “Return any search hits” matching_contacts = [ ] for contact in self: if name in contact.name: matching_contacts.append(contact) # Endif; # Endfor; return matching_contacts # End Search # End Class This is a new class that builds on the list type. Create a new list of matching names.
  • 29. Extending Built-Ins class Contact(list): contacts_list = ContactList() def _ _init_ _(self, name, email): self.name = name self.email = email self.contacts_list.append(self) # End Init # End Class
  • 30. Extending Built-Ins class Contact(list): contacts_list = ContactList() def _ _init_ _(self, name, email): self.name = name self.email = email self.contacts_list.append(self) # End Init # End Class Instead of declaring contacts_list as a list we declare it as a class that inherits from list.
  • 31. Extending Built-Ins • Let’s run this, first we’ll declare some instances, and then do a search: c1 = Contact("Tom StaffMember", "[email protected]") c2 = Contact("Fred StaffMember", "[email protected]") c3 = Contact("Anne StaffMember", "[email protected]") SearchName = input("Who would you like to search for?n") print([c.name for c in Contact.contacts_list.search(SearchName)])
  • 32. Extending Built-Ins • Let’s run this, first we’ll declare some instances, and then do a search: c1 = Contact("Tom StaffMember", "[email protected]") c2 = Contact("Fred StaffMember", "[email protected]") c3 = Contact("Anne StaffMember", "[email protected]") SearchName = input("Who would you like to search for?n") print([c.name for c in Contact.contacts_list.search(SearchName)]) >>> Who would you like to search for? Staff ['Tom StaffMember', 'Fred StaffMember', 'Anne StaffMember']
  • 34. Overriding and super • So inheritance is used to add new behaviours, but what if we want to change behaviours? • Let’s look at the Supplier class again, and we want to change how the order method works.
  • 35. Overriding and super • Here’s what we have so far: class Supplier(Contact): def order(self, order): print("The order will send our " "'{}' order to '{}'".format(order,self.name)) # End order. # End Class
  • 36. Overriding and super • Here’s a new version: class SupplierCheck(Supplier): def order(self, order, balance): if balance < 0: # THEN print("This customer is in debt.") else: print("The order will send our " "'{}' order to '{}'".format(order,self.name)) # End order. # End Class
  • 37. Overriding and super • Here’s a new version: class SupplierCheck(Supplier): def order(self, order, balance): if balance < 0: # THEN print("This customer is in debt.") else: print("The order will send our " "'{}' order to '{}'".format(order,self.name)) # End order. # End Class
  • 38. Overriding and super • Here’s a new version: class SupplierCheck(Supplier): def order(self, order, balance): if balance < 0: # THEN print("This customer is in debt.") else: print("The order will send our " "'{}' order to '{}'".format(order,self.name)) # End order. # End Class The new class inherits from the Supplier class. It is therefore a subclass of it.
  • 39. Overriding and super • Here’s a new version: class SupplierCheck(Supplier): def order(self, order, balance): if balance < 0: # THEN print("This customer is in debt.") else: print("The order will send our " "'{}' order to '{}'".format(order,self.name)) # End order. # End Class The new class inherits from the Supplier class. It is therefore a subclass of it. And it overrides the order method to now explore the new balance attribute.
  • 40. Overriding and super • We declare objects as follows: s1 = Supplier("Joe Supplier", "[email protected]") s2 = Supplier("John Supplier", "[email protected]") s3 = SupplierCheck("Anne Supplier", "[email protected]") s4 = SupplierCheck("Mary Supplier", "[email protected]")
  • 41. Overriding and super • And when we call the new order method: s1.order("Bag of sweets") s2.order("Boiled eggs") s3.order("Coffee", 23) s4.order("Corn Flakes", -12)
  • 42. Overriding and super • And when we call the new order method: s1.order("Bag of sweets") s2.order("Boiled eggs") s3.order("Coffee", 23) s4.order("Corn Flakes", -12) The order will send our 'Bag of sweets' order to 'Joe Supplier' The order will send our 'Boiled eggs' order to 'John Supplier' The order will send our 'Coffee' order to 'Anne Supplier' This customer is in debt.
  • 43. Overriding and super • The only problem with this approach is that the superclass and the subclass both have similar code in them concerning the order method. • So if at some point in the future we have to change that common part of the method, we have to remember to change it in two places. • It is better if we can just have the similar code in one place.
  • 44. Overriding and super • We can do this using the super( ) class. • The super( ) class calls the superclass method from the subclass. • Let’s look at how we had it:
  • 45. Overriding and super • Here’s overridng: class SupplierCheck(Supplier): def order(self, order, balance): if balance < 0: # THEN print("This customer is in debt.") else: print("The order will send our " "'{}' order to '{}'".format(order,self.name)) # End order. # End Class
  • 46. Overriding and super • Here’s super: class SupplierCheck(Supplier): def order(self, order, balance): if balance < 0: # THEN print("This customer is in debt.") else: super().order(order) # End order. # End Class
  • 47. Overriding and super • Here’s super: class SupplierCheck(Supplier): def order(self, order, balance): if balance < 0: # THEN print("This customer is in debt.") else: super().order(order) # End order. # End Class Call the order method in the superclass of SupplierCheck, so call Supplier.order(order).
  • 48. etc.