So, it's Monty Python Flying Circus okay actually it is not but just so you know this is where the python language got its name it is from the comedy but today's talk will be about OOP or object-orientated programming in python And I am Junxi, I am a second-year student from Singapore University of Technology and Design currently in the Computer Science / info systems major And I am also currently an intern in Tinkerbox In fact, it is my fellow intern and TechLadies' Kate who invited to speak here today so I am glad to here so now i understand that most of the audience here are beginner level Just to get a gauge, how many of you guys have done OOP in python before? Okay, I will say that for those who have not done anything I hope that by the end of this talk we will get to understand more about what OOP is about 'Kay, I would say OOP is like an intermediate level topic but it is a very key topic for you to understand for you to move on to do more advanced stuff so this is why I chose the topic for today but also it is a very broad topic so i don't know how much I can cover in 20 minutes So forgive me if I speak too fast Or skip over certain things okay so just a brief idea of what we will be talking about We will only be covering, like, nuts and bolts of OOP in python So language-specified construct syntax That sort of thing Because I believe for beginners this will be what you will be more interested in but at the same time, i hope i will be able to talk a little bit about what you called Object-oriented design principles of writing good codes with design principles, basically so Before I actually go into the actual materials I have a confession to make The sad truth is, okay maybe not that sad but the truth is that I probably enjoy drawing silly things more than I like programming so as a result, you will see a lot of silly drawings Probably more silly drawings than code in this talk but it is my hope that you know it will sort of give you a visual aid to understanding the concepts that I will be talking about Okay so let's dive right in Nuts and bolts so these are the topics I will be covering Objects Classes & Instances Attributes and Methods Inheritance and Scope And those words have completely flown over your head Do not fear by the end of this talk you should, hopefully, have a rough idea of what it means so let's jump straight into the first... oh wait, sorry. before that i just want to make it clear that in common use right now there are two main python versions so python 2 and python 3 there are some differences in these 2 versions so as beginners it can be easy to trip up over these differences so just to be clear that when you read up resources online for example, you should know what the version those resources are talking about which python version they are talking about so for clarification just be clear I am using python 3 for all my examples here alright so objects think of objects as a way of logically encapsulating your code so objects has what we called attributes and methods so let's look at this doggeh over here i like to think of attributes as kinda like adjectives? or properties So for example you say the dog is white or can have a weight of 7 kg so these are like the attributes of the dog on the other hand methods they are kinda more like verbs a dog can wag tail and bark so these are the things the dog can do these are like methods of my dog object this is a slightly lame description but i hope can bring across into the field of what I mean by attributes and method and in fact, you know in python you have your variables and your functions right? so your attributes and methods are just your good ol' friends your variables and functions the only thing is that attributes are kind of like variables that are associated with a certain object and methods are functions that are associated with a certain object in the end, objects basically is a way of calculating data and a form of attributes with functions of procedures in the form of methods Okay so let's look at this dog transcribe into real python code for those who have not done any OOP in python before this syntax might look intimidating but hopefully by the end of it you will be able to understand what's going on The kind of object-oriented programming in python that we are dealing with is called class-based object oriented programming This is the kind of OOP you will find in languages like Ruby, Java, C# and etc. Only the most popular kind of OOP Just so you know, there are other kinds out there Class-based OOP you see here that I am defining this class "dog" you should know by now that in python, indentation is intactly(?) significant so all these indented code this is inside the class body. This is my class definition. Now I am talking about classes Now I have to talk about like explain about classes and instances Because we are talking about class-based OOP so what are classes and instances? So, think of a class as a kind of category where an instance is particular living example of a kind of thing To drive the point across, let me talk about babies Yes! Babies When you think of a baby right.. a human baby you kind of have this conception tectonic idea of what babies should look like sweet, tender, angel angelic things That is sort of like class this general category this general idea whereas if you actually see this real living kicking screaming pooping baby you are like "What's this ugly yoda-like thing?" That is kind of like instance that's the real concrete instance of a baby So I hope that kinda brings across the idea of what's the differences between the class and instance Let's go back to the code and in my class so in this class definition right when I define my class you can think of it as defining a custom data type so you know in python we have our built-in types we have integers we have strings we have lists we have dictionaries When you define your class it is as if you are building your own data type And this one data type has its own attributes and its own methods I will go through the stuff here later but let me go down to the code here so what you see down here in this line, line 13 this is where I instantiate I create an instance for my class So I am assigning I am creating an instance called "Doggeh" And this the way I construct my instance by calling the, what we called the class constructor So this is the class name the parenthesis I pass in certain arguements to initialise my instance so now I have this Doggeh which is an instance of a dog class Okay so now that we sort of know what classes and instances are let me go back I will start going through the code here So to understand the code in here we have to talk about attributes and methods When we talk about attributes and methods There are two kinds They can be instance attributes or instance methods or they can be class attributes and class methods But for now I will talking about instance attributes and instance methods Because that is what we usually deal with Inside this class body I define several methods for my dog class so these are how you define functions I mean, methods are just functions but they are inside a class This is how I define my methods And you notice that this first method looks kind of special with the double underscore in front So double underscore init double underscore so i will be talking more about this later but let's look at these two func.. methods first Now you will notice something interesting about this method I mean, in the end, these methods are just stuff that they print something to the console right It is going to print "Wag Wag" or "Woof Woof" but there is something interesting about this in the method signature I am actually taking this parameter 'self' and this 'self' is actually an indication to you that these methods are instance methods We can invoke these instance methods by using this Dog syntax over here so I invoke "wag tail" by calling it Doggeh.wag_tail() And just to emphasize that you have to put the parenthesis there to invoke the method