# Object Oriented Programming Day 1 ### Learning Objectives ***Students Will Be Able To...*** * Initialize a class * Call various methods from within a class * Import a class --- ### Context * Python is an object oriented language. * It allows us to organize our code for efficiency and readability --- ### Lesson #### Part 1 - What is OOP? * Object Oriented Programming is the practice of writing your code around `Objects` * We will come back to this later in the lesson #### Part 2 - What are Objects? * Everything in Python is an object * Every object is an `instance` of a class * We know about the various data types and data structures. Well take `lists` for example. The moment you create a list you made an `instance` of it. This list now has access to all the methods inside the `list class` of Python3 * lists belong to a list class * strings belong to a string class * dictionaries belong to a dictionary class #### Part 3 - Classes And what is a class? Simply a logical grouping of data and functions (the latter of which are frequently referred to as "methods" when defined within a class). * A class holds many methods that an object can respond to. * They are defined with the word `class` * They are always capitalized * They are just blueprints for us to use later * Lets make a class example for Car * This car will take in three variables when created * This car will have access to a method called `hello` that will print the make, model, and year to the to your terminal ``` class Car: """ We are making a car class """ def __init__(self, make, model, year): self.make = make self.model = model self.year = year def hello(self): print("You have started your car, it is a {year} {make} {model}".format(year = self.year, make = self.make, model = self.model)) my_car = Car(make = "Bugatti", model = "Veyron", year = 2015) my_car.hello() ``` ***Five Min Exercise*** * Make a class of your favorite movie or tv show * When the class is instantiated I want to be able to use the following methods * `.cast` will return me a list of cast members real names * `.characters` will return me a list of the characters in the movie * `.release` will return me the release date of that movie * `.genre` will return the genres this movie belongs to #### Part 4 - Classes Terminology * `Instantiate` - when we instantiate a class we are creating a new instance of that class. * The`Car` class is a blueprint. We instantiate it by creating a variable with the Car class. * This variable is now an `instance` of that care class * We can use the class over and over again, if we had multiple cars, or in the example of your previous exercise, multiple movies. #### Part 5 - Instance and Class Variables * A class variable is a variable you want to be given to every instance of the class * A instance variable is specific to that instance of the class * The term `self` is used over and over again throughout class creation. This is referring to the object in that moment in time. (Instance of the object) ***Five Min Exercise*** * Create a class called `Athlete` * Create three or more instances using that `Athelete` class * Every athlete has two legs, two arms, and is_rich(true) * Each athlete has THEIR OWN name, sport, team, height, weight #### Part 6 - Scope * Scope works inside out * The methods and variables that are local will have access to those outside of it, however, the outside does not have access to the inside. * Think about Russian Nesting Dolls * `return` is what allows us to move values and variables between two different things #### MISC * triple quotes doc string used to comment your code and help others read your code #### Resources Tutorials Point explanation of classes and objects - (http://www.tutorialspoint.com/python/python_classes_objects.htm)[http://www.tutorialspoint.com/python/python_classes_objects.htm]