class_static_methods.py

#!/usr/bin/python
# ================================================================
# From: www.youtube.com/watch?v=rq8cL2XMM5M
#    (Python OOP Tutorial 3: classmethods andstaticmethods)
# ----------------------------------------------------------------
# 1. When working with classes, regular methods automatiacally
#    pass the instance as the first argument. By conventions
#    it is called 'self'.
# 2. Class methods automatically pass the class as the first
#    argument. By convention it is called 'cls'.
# 3. Static methods don't pass automatically pass anything.
#    The don't pass the instance or the class.
# ================================================================

class Employee:

    number_of_emps = 0               # class variable
    raise_amt = 1.04                 # class variable

    def __init__(self,first,last,pay):
        self.first = first
        self.last  = last
        self.email = first + '.' + last + 'gmail.com'
        self.pay   = pay

        Employee.number_of_emps += 1 

    def fullname(self):
        return '{} {}'.format(self.first,self.last)

    def apply_rase(self):
        self.pay = int(self.pay * self.raise_amt)

    @classmethod                          # decorator
    def set_raise_amount(cls,amount):
        cls.raise_amt = amount

# create employee objests

emp_1 = Employee('Tom',  'Jones', 50000)
emp_2 = Employee('Judy', 'Smith', 60000)

# display raise amounts

print(Employee.raise_amt)
print(emp_1.raise_amt)
print(emp_2.raise_amt)

# test setting class variable (raise amount)
# (Which class (Employee) is defined by the method call)

Employee.set_raise_amount(1.05)

print(Employee.raise_amt)
print(emp_1.raise_amt)
print(emp_2.raise_amt)