{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Objects in Python" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Everything in Python is an 'object'.\n", "\n", "Defining custom types of objects is easy:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "\n", "class Employee:\n", " def __init__(self, name, salary):\n", " self.name = name\n", " self.salary = salary\n", " \n", " def fire(self):\n", " self.salary = 0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Functions within the class (type) definition are called 'methods'.\n", "* They take an explicit `self` parameter, through which the object is passed.\n", "* `__init__` is the 'constructor'\n", " * Objects are created by 'calling' the type like a function.\n", " * Arguments in this call are passed to the constructor" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'Joe'" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "joe = Employee(\"Joe\", 100000)\n", "joe.name" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "100000" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "joe.salary" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's fire Joe." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [], "source": [ "joe.fire()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "joe.salary" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Inheritance" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Types can be based on other types by inheritance:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [], "source": [ "class Boss(Employee):\n", " def __init__(self, name, salary, supervises):\n", " super(Boss, self).__init__(name, salary)\n", " \n", " self.supervises = supervises\n", " \n", " def fire(self):\n", " for s in self.supervises:\n", " s.fire()\n", " \n", " super(Boss, self).fire()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "150000" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "joe = Employee(\"Joe\", 100000)\n", "jack = Employee(\"Jack\", 100000)\n", "mike = Boss(\"Mike\", 150000, [joe, jack])\n", "\n", "mike.salary" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "100000" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "joe.salary" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now what happens to Joe's salary if Mike gets fired?" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [], "source": [ "mike.fire()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "joe.salary" ] } ], "metadata": {}, "nbformat": 4, "nbformat_minor": 0 }