[MUSIC] Imagine you have to describe an apple to someone who's never seen one before, how would you do it? And what would you say, besides that it's delicious? You might start off by saying that an apple is a type of fruit. You might talk about how there are lots of different kinds of apples, each with its own color, flavor, and name. Well, when you're explaining concepts to your computer, it's a good idea to approach it in a similar way. Your computer has no idea what an apple is, or even what a fruit can be. If you want your computer to understand these things, you have to describe them in your programs and scripts. Up to now, we've discussed elements of syntax, like variables, functions, loops, and some more complex data structures, like lists and dictionaries. These are powerful tools in an IT specialist's toolbox, but it can still be difficult to translate real-world concepts, like what's an apple, or what's a user account into programs. To make it easier for computers to understand these new concepts, Python uses a programming pattern called object-oriented programming, which models concepts using classes and objects. This is a flexible, powerful paradigm where classes represent and define concepts, while objects are instances of classes. In our apple example, we can have a class called apple that defines the characteristics of an apple. We could then have a bunch of instances of that apple class, which are the individual objects of that class. The idea of object-oriented programming might sound abstract and complex, but you've actually been using objects already without even realizing it. Almost everything in Python is an object, all of the numbers, strings, lists, and dictionaries we've seen so far, and have used in our exercises and quizzes, have been objects. And each of them was an instance of a class representing a concept. The core, apple pun intended, concept of object-oriented programming comes down to attributes and methods associated with a type. The attributes are the characteristics associated to a type, and the methods are the functions associated to a type. In the apple example, the attributes are the color and flavor. What would the methods be? Well, it depends on what we're going to do with apple. We could maybe have a cut method that turns one whole apple into four slices, or we could have an eat method that reduces the amount of apple available with every bite. Let's think about a more IT focused example, like a file in our computer. A file has lots of attributes, it has a name, a size, the date it was created, permissions to access it, its contents, and a whole lot more. There are actually so many different file attributes, that Python has multiple classes to deal with files. The typical file object focuses on the file's contents, and so this object has a bunch of methods to read and modify what's inside the file. Hopefully, these examples help make object-oriented programming a little clearer, but don't worry if you haven't fully wrapped your head around it. In our next video, we'll explore how to apply these concepts to some classes and objects we've already used in Python, which will help us dig a little deeper into how this all works.