Objects in Python

Everything in Python is an 'object'.

Defining custom types of objects is easy:

In [1]:
class Employee:
    def __init__(self, name, salary):
        self.name = name
        self.salary = salary
        
    def fire(self):
        self.salary = 0
  • Functions within the class (type) definition are called 'methods'.
  • They take an explicit self parameter, through which the object is passed.
  • __init__ is the 'constructor'
    • Objects are created by 'calling' the type like a function.
    • Arguments in this call are passed to the constructor
In [11]:
joe = Employee("Joe", 100000)
joe.name
Out[11]:
'Joe'
In [7]:
joe.salary
Out[7]:
100000

Let's fire Joe.

In [8]:
joe.fire()
In [9]:
joe.salary
Out[9]:
0

Inheritance

Types can be based on other types by inheritance:

In [10]:
class Boss(Employee):
    def __init__(self, name, salary, supervises):
        super(Boss, self).__init__(name, salary)
        
        self.supervises = supervises
        
    def fire(self):
        for s in self.supervises:
            s.fire()
            
        super(Boss, self).fire()
In [12]:
joe = Employee("Joe", 100000)
jack = Employee("Jack", 100000)
mike = Boss("Mike", 150000, [joe, jack])

mike.salary
Out[12]:
150000
In [13]:
joe.salary
Out[13]:
100000

Now what happens to Joe's salary if Mike gets fired?

In [14]:
mike.fire()
In [15]:
joe.salary
Out[15]:
0