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