Object Oriented
Object Oriented Python#
Everything in python is an Object
- Usually 1 class per file
Declaration#
class Monster:
hit_points = 1
color = 'yellow'
weapon = 'sword'
importing a class#
from monster import Monster
- means bring Monster class from inside the monster library
Every file is a library
Using attributes#
eg. Monster.hit_points
Creating an instance of a class#
Use ()
eg. jubjub = Monster()
Methods#
Functions that are part of a class are called methods
Every method at the very least takes the self argument
Eg. def battlecry(self):
self
always represents the instance you are calling the method on (doesn;t have to be called self)
Can use self variable to get info about the current instance
Dunder Init (init)#
Runs when a new instance is created
a pythonic construcutor
eg.
class Monster:
def __init__(self, hit_points, weapon, color, sound):
self.hit_points = hit_points
self.weapon = weapon
self.color = color
self.sound = sound
def battlecry(self):
return self.sound.upper()
slimey = Monster(5, 'Sword', 'blue', 'GLUG')
Can set defaults:
def __init__(self, hit_points=5, weapon='Sword', color='yellow', sound='roar'):
Or dictionary unpacking:
**
means handle as dictionary
def __init__(self, **kwargs):
self.hit_points = kwargs.get('hit_points', 1)
# Can still set the default
Delete an instance#
jubjub = Monster()
del jubjub
Setting attributes#
Usually used in __init__(self, **kwargs)
for key, value in kwargs.items():
setattr(self, key, value)
Usage: jabber = Monster(color='blue', hit_points=500, sound='whiffling', adjective='manxsome')
Inheritance#
Showing a subclass = Inheriting all attribute of parent class:
class Goblin(Monster):
pass
Every class inherits from default object
class
so class Monster:
=== class Monster(objecy)
pass keyword tells python to keep going as though nothing has happened
Str#
__str__
a magic method called when class is converted to a string / string representation
self.__class__.__name__
- class name and string representation of that class
def __str__(self):
return '{} {}, HP: {}, XP: {}'.format(self.color.title(),
self.__class__.__name__,
self.hit_points,
self.experience)
from monster import Monster
my_mon = Monster()
print(my_mon)
Will print the dunder str
DRY#
Don’t repeat yourself
- group common operations into Functions
- group common functionality into classes
Override#
You can override an inherited class simply by writing the method in the subclass
None#
Special variable only ever equa to itself
It is falsey
sys.exit()
..sys
is a library to exit the interpreter