In this tutorial, I continue to explain how Object Oriented Programming is used with Python 2.7. I cover some of the more complicated subjects including how to:
- Allow the user to define an infinite number of attributes
- Use Inheritance and what it is
- Override Methods
- Use Polymorphism and what it is
- Inherit from 2 more more classes
- Use many of the built in object methods in Python
If you don’t completely understand Object Oriented Programming after this and the first part of this tutorial Python Object Oriented Programming. Please leave a comment below and I’ll do whatever I can to explain this important subject.
Like always, a lot of code follows the video. If you have any questions or comments leave them below. And, if you missed my other Python Tutorials they are available here:
- Python 2.7 Tutorial Pt 1 : Importing Modules and variable types
- Python 2.7 Tutorial Pt 2: Python Lists & Tuples
- Python 2.7 Tutorial Pt 3: The Print Function & Dictionaries
- Python 2.7 Tutorial Pt 4: The IF Statement & Conditional Expression
- Python 2.7 Tutorial Pt 5: Looping with While and For
- Python 2.7 Tutorial Pt 6: Python Functions
- Python 2.7 Tutorial Pt 7: Python Object Oriented Programming
Here is All the Code from the Video
Note: You have to insert the white space and everything will work. I could have styled it with HTML, but that would have required you to erase all of the tags. Hope this helps?
#! /usr/bin/python
__metaclass__ = type
class Animal:
__name = “No Name”
__owner = “No Owner”
def __init__(self, **kvargs): # The constructor function called when object is created
self._attributes = kvargs
# There is a function called a destructor __del__, but its best to avoid it
def set_attributes(self, key, value): # Accessor Method
self._attributes[key] = value
return
def get_attributes(self, key):
return self._attributes.get(key, None)
def noise(self): # self is a reference to the object
print(‘errr’) # You use self so you can access attributes of the object
return
def move(self):
print(‘The animal moves forward’)
return
def eat(self):
print(‘Crunch, crunch’)
return
def __hiddenMethod(self): # A hidden method
print “Hard to Find”
return
class Dog(Animal):
def __init__(self, **kvargs): # Not needed unless you plan to override the super
super(Dog, self).__init__() # This wouldn’t work without the second line
self._attributes = kvargs
def noise(self): # Overriding the Animal noise function
print(‘Woof, woof’)
Animal.noise(self)
return
class Cat(Animal):
def __init__(self, **kvargs): # Not needed unless you plan to override the super
super(Cat, self).__init__()
self._attributes = kvargs
def noise(self):
print(‘Meow’)
return
def noise2(self):
print(‘Purrrrr’)
return
class Dat(Cat,Dog):
def __init__(self, **kvargs): # Not needed unless you plan to override the super
super(Dat, self).__init__()
self._attributes = kvargs
def move(self):
print(‘Chases Tail’)
return
def playWithAnimal(Animal): # This is polymorphism
Animal.noise()
Animal.eat() # Works even if the method isn’t in Cat because Cat is an Animal
Animal.move()
print(Animal.get_attributes(‘__name’))
print(Animal.get_attributes(‘__owner’))
print ‘\n’
Animal.set_attributes(‘clean’,”Yes”)
print(Animal.get_attributes(‘clean’))
jake = Dog(__name = ‘Jake’, __owner = ‘Paul’)
sophie = Cat(__name = ‘Sophie’, __owner = ‘Sue’)
playWithAnimal(sophie)
playWithAnimal(jake)
# print sophie.__hiddenMethod() Demonstrating private methods
print issubclass(Cat, Animal) # Checks if Cat is a subclass of Animal
print Cat.__bases__ # Prints out the base class of a class
print sophie.__class__ # Prints the objects class
print sophie.__dict__ # Prints all of an objects attributes
japhie = Dat(__name = ‘Japhie’, __owner = ‘Sue’)
japhie.move()
print japhie.get_attributes(‘__name’)