python super

# It's kinda hard to explain this just by code.
# So I'll provide a link to a pretty good explanation of it.
https://www.pythonforbeginners.com/super/working-python-super-function

Here is what the above code is Doing:
1. We’re creating a class called ‘Person’
2. We’re creating a subclass called ‘Employee’
3. We’re creating a subclass called ‘Manager’
4. We’re creating a subclass called ‘CEO’
5. We’re creating a subclass called ‘Secretary’
6. We’re creating a subclass called ‘SalesPerson’
7. We’re creating a subclass called ‘FactoryWorker’

The ‘Person’ class is the parent class of all the other classes.
The ‘Employee’ class is the parent class of the ‘Manager’ and ‘CEO’ classes.
The ‘Manager’ class is the parent class of the ‘Secretary’ class.
The ‘CEO’ class is the parent class of the ‘SalesPerson’ and ‘FactoryWorker’ classes.

The ‘Person’ class has one attribute, ‘name’, and one method, ‘greet()’.
The ‘Employee’ class has one attribute, ’employee_id’, and one method, ‘work()’.
The ‘Manager’ class has one attribute, ‘title’, and one method, ‘delegate_work()’.
The ‘CEO’ class has one attribute, ‘share_price’, and one method, ‘buy_company()’.
The ‘Secretary’ class has one attribute, ‘skill_level’, and one method, ‘answer_phone()’.
The ‘SalesPerson’ class has one attribute, ‘quota’, and one method, ‘sell()’.
The ‘FactoryWorker’ class has one attribute, ‘shift’, and one method, ‘assemble()’.

When you create an instance of the ‘Person’ class, you have to give it a ‘name’.
When you create an instance of the ‘Employee’ class, you have to give it an ’employee_id’.
When you create an instance of the ‘Manager’ class, you have to give it a ‘title’.
When you create an instance of the ‘CEO’ class, you have to give it a ‘share_price’.
When you create an instance of the ‘Secretary’ class, you have to give it a ‘skill_level’.
When you create an instance of the ‘SalesPerson’ class, you have to give it a ‘quota’.
When you create an instance of the ‘FactoryWorker’ class, you have to give it a ‘shift’.

The ‘greet()’ method prints out a greeting.
The ‘work()’ method prints out a message saying that the person is working.
The ‘delegate_work()’ method prints out a message saying that the manager is delegating work.
The ‘buy_company()’ method prints out a message saying that the CEO is buying a company.
The ‘answer_phone()’ method prints out a message saying that the secretary is answering the phone.
The ‘sell()’ method prints out a message saying that the salesperson is selling.
The ‘assemble()’ method prints out a message saying that the factory worker is assembling.

The ‘__init__()’ method is a special method that is called when you create an instance of a class.
The ‘__init__()’ method is used to initialize the attributes of an instance.

The ‘__str__()’ method is a special method that is called when you print an instance of a class.
The ‘__str__()’ method is used to return a string representation of an instance.

The ‘__repr__()’ method is a special method that is called when you represent an instance of a class.
The ‘__repr__()’ method is used to return a string representation of an instance.

The ‘__eq__()’ method is a special method that is called when you compare two instances of a class.
The ‘__eq__()’ method is used to compare two instances of a class and return True or False.

The ‘__ne__()’ method is a special method that is called when you compare two instances of a class.
The ‘__ne__()’ method is used to compare two instances of a class and return True or False.

The ‘__lt__()’ method is a special method that is called when you compare two instances of a class.
The ‘__lt__()’ method is used to compare two instances of a class and return True or False.

The ‘__gt__()’ method is a special method that is called when you compare two instances of a class.
The ‘__gt__()’ method is used to compare two instances of a class and return True or False.

The ‘__le__()’ method is a special method that is called when you compare two instances