""" Their is going to be a relatively big jump in difficulty here, but dont be scared! All you need to know to understand classes are variables and functions, as covered in the previous file. Key Concepts: **class** is a blueprint for creating objects (specific instances of that class), a class represents a collection of attributes and methods to represent something (e.g a Person) **object** is an instance of a class with its own unique data. **attributes** are values tied to a object **methods** are the exact same as functions, but are tried to a class. **Magic/dunder methods** are methods predefined by python that can be used for various things. **__init__** is a type of magic method, it is known as a constructor and initializes the objects attributes when its created """ class Person: """A class Representing a Human/Person""" # This is the constructor, whenever a new person is created it runs and can be used to assign the new person their attributes! def __init__(self, name, age, eye_color): # An attribute self.name = name self.age = age self.eye_color = eye_color # This is a method, note "self" must be passed as a paramater/arguement for it to access the attributes of... itself. def canApplyForLicence(self): if self.age >= 17: return f"{self.name} can apply for their driving permit!" else: return f"{self.name} is too young ({self.age}) and can not apply for a driving permit." # Creates a new person with the following values pedro = Person("Pedro", 19, "Brown") # Runs the canApplyForLicence method, and prints the return value print(pedro.canApplyForLicence()) # Creates a Another new person with the following values (iain armitage if you wanted to know.) Iain = Person("Iain", 16, "Blue") # Runs the canApplyForLicence method, and prints the return value print(Iain.canApplyForLicence())