{ "metadata": { "name": "", "signature": "sha256:dbbd8ed92141bcc804ff2fbeacf8bb85f122dc6e196e1d830291a4a449a3a439" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Chapter 8: Data Abstraction through Classes and User-Defined Data Types " ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Program Source Code 8.1, page no: 208" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Super:\n", " def __init__(self):\n", " self.__IntegerData=None #private member\n", " #public functions\n", " def SetData(self,i):\n", " self.__IntegerData=i #refer to IntegerData\n", " def ShowData(self):\n", " print \"Data is \",self.__IntegerData,' '\n", "\n", "ob1=Super()\n", "ob2=Super()\n", "ob1.SetData(1000)\n", "ob2.SetData(2000)\n", "ob1.ShowData()\n", "ob2.ShowData()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Data is 1000 \n", "Data is 2000 \n" ] } ], "prompt_number": 1 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Program Source Code 8.2, page no:211" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class X:\n", " def __init__(self):\n", " self.a=None #private members\n", " self.b=None #private members\n", " \n", "#no structure type present in python \n", "x = X()\n", "\n", "x.a=0\n", "x.b=1\n", "print \"x.a=\",x.a,\",x.b=\",x.b" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "x.a= 0 ,x.b= 1\n" ] } ], "prompt_number": 1 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Program Source Code 8.3, page no:214" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Fraction:\n", " \n", " def SetValue(self,a,b): #public functions\n", " self.__num=a \n", " self.__denom=b \n", " def GetValue(self,a,b):\n", " a=self.__num\n", " b=self.__denom\n", " \n", "f=Fraction()\n", "n=input(\"Enter n: \") #user input\n", "d=input(\"Enter d: \") #user input\n", "print \"enter the numerator and denominator: \", ' ',n,d\n", "\n", "f.SetValue(n,d) #call function SetValue\n", "print \"Numerator value set: \", ' ',n\n", "print \"Denominator value set: \", ' ',d\n", "f.GetValue(n,d) #call function GetData\n", "print \"Numerator value retrieved: \", ' ',n\n", "print \"Denominator value retrieved: \", ' ',d" ], "language": "python", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter n: 3\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter d: 4\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "enter the numerator and denominator: 3 4\n", "Numerator value set: 3\n", "Denominator value set: 4\n", "Numerator value retrieved: 3\n", "Denominator value retrieved: 4\n" ] } ], "prompt_number": 3 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Program Source Code 8.4, page no:216" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class SimpleClass:\n", " def __init__(self):\n", " self.__i=None #private member\n", " \n", " def __init__(self):\n", " self.__i=500 #constructor\n", " \n", " def SetData(self,d):\n", " self.__i=d\n", " \n", " def GetData(self):\n", " return self.__i\n", " \n", "#Initializing\n", "s1=SimpleClass()\n", "s2=SimpleClass()\n", "print \"s1 has data: \",s1.GetData()\n", "print \"s2 has data: \",s2.GetData()\n", "s1.SetData(1000) #function call\n", "s2.SetData(2000)\n", "print \"s1 has data: \",s1.GetData(),' '\n", "print \"s2 has data: \", s2.GetData(),' '\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "s1 has data: 500\n", "s2 has data: 500\n", "s1 has data: 1000 \n", "s2 has data: 2000 \n" ] } ], "prompt_number": 1 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Program Source Code 8.5, page no:217" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class SimpleClass:\n", " __IntegerData=None\n", " def __init__(self,data=None):\n", " if data==None:\n", " self.__IntegerData=500 #default constructor\n", " else:\n", " self.__IntegerData=data #parameterised constructor\n", " \n", " def SetData(self,d):\n", " self.__IntegerData=d\n", " \n", " def GetData(self):\n", " return self.__IntegerData\n", " \n", "#Initializing\n", "s1=SimpleClass()\n", "s2=SimpleClass()\n", "s3=SimpleClass(400)\n", "s4=SimpleClass(600)\n", "print \"s1 has data: \",s1.GetData(),' '\n", "print \"s2 has data: \",s2.GetData(),' '\n", "print \"s3 has data: \",s3.GetData(),' '\n", "print \"s4 has data: \",s4.GetData(),' '\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "s1 has data: 500 \n", "s2 has data: 500 \n", "s3 has data: 400 \n", "s4 has data: 600 \n" ] } ], "prompt_number": 1 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Program Source Code 8.6, page no:218" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Fraction: \n", " def_init_num=None #private members\n", " def_init_denom=None #private members\n", " def __init__(self,a=0,b=1):\n", " self.__num=a\n", " self.__denom=b\n", " print \"Numerator set inside constructor\",' ',n\n", " print \"Denominator set inside constructor\",' ',d\n", " \n", " def SetValue(self,a,b):\n", " self.__num=a\n", " self.__denom=b\n", " def GetValue(self,a,b):\n", " a= self.__num\n", " b= self.__denom\n", " return a,b\n", " \n", " def __del__(self): #destructor\n", " pass\n", " \n", "n=input(\"Enter n: \") #user input\n", "d=input(\"Enter d: \") #user input\n", "print \"Please enter value of numerator and denominator: \",' ',n,d\n", "f=Fraction(n,d)\n", "f.GetValue(n,d)\n", "print \"Numerator value retrieved: \", ' ',n\n", "print \"Denominator value retrieved: \", ' ',d" ], "language": "python", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter n: 3\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter d: 4\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Please enter value of numerator and denominator: 3 4\n", "Numerator set inside constructor 3\n", "Denominator set inside constructor 4\n", "Numerator value retrieved: 3\n", "Denominator value retrieved: 4\n" ] } ], "prompt_number": 1 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Program Source Code 8.7, page no:221" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Fraction:\n", " \n", " def __init__(self,a=0,b=1): #constructor\n", " self.__num=a\n", " self.__denom=b\n", " print \"Numerator set inside constructor: \",self.__num\n", " print \"Denominator set inside constructor: \",self.__denom \n", " \n", " def GetValue(self,a,b):\n", " return self.__num,self.__denom\n", "n=input(\"Enter n: \") #user input\n", "d=input(\"Enter d: \") #user input\n", "print \"Please enter the value of the numerator and denominator: \",n,d\n", "f=Fraction(n,d)\n", "n,d=f.GetValue(n,d)\n", "print \"Numerator value retrieved: \", ' ',n\n", "print \"Denominator value retrieved: \", ' ',d\n", "n=input(\"Please enter the value of numerator only: \")\n", "f1=Fraction(n)\n", "n,d=f1.GetValue(n,d)\n", "print \"Numerator value retrieved: \", ' ',n\n", "print \"Denominator value retrieved: \", ' ',d\n", "print 'ok..now I will create a fraction-no input please'\n", "f2=Fraction()\n", "n,d=f2.GetValue(n,d)\n", "print \"Numerator value retrieved: \", ' ',n\n", "print \"Denominator value retrieved: \", ' ',d" ], "language": "python", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter n: 3\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter d: 4\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Please enter the value of the numerator and denominator: 3 4\n", "Numerator set inside constructor: 3\n", "Denominator set inside constructor: 4\n", "Numerator value retrieved: 3\n", "Denominator value retrieved: 4\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Please enter the value of numerator only: 3\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Numerator set inside constructor: 3\n", "Denominator set inside constructor: 1\n", "Numerator value retrieved: 3\n", "Denominator value retrieved: 1\n", "ok..now I will create a fraction-no input please\n", "Numerator set inside constructor: 0\n", "Denominator set inside constructor: 1\n", "Numerator value retrieved: 0\n", "Denominator value retrieved: 1\n" ] } ], "prompt_number": 3 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Program Source Code 8.8, page no:223" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Fraction:\n", " def_init_num=None #private members\n", " def_init_denom=None #private members\n", " \n", " def __init__(self,anotherFraction=None): \n", " if anotherFraction==None: #normal constructor\n", " self.__num=anotherFraction\n", " self.__denom=anotherFraction\n", " else: #copy constructor\n", " self.__num=anotherFraction.self.__num\n", " self.__denom=anotherFraction.self.__denom\n", " \n", " \n", " #public functions\n", " def SetValue(self,a,b):\n", " self.__num=a\n", " self.__denom=b#refer to IntegerData\n", " def GetValue(self,a,b):\n", " a=self.__num\n", " b=self.__denom\n", " return a,b\n", " \n", "f=Fraction()\n", "n=input(\"Enter n: \") #user input\n", "d=input(\"Enter d: \") #user input\n", "print \"enter the numerator and denominator: \", ' ',n,d\n", "\n", "f.SetValue(n,d) #call function SetValue\n", "print \"Numerator value set: \", ' ',n\n", "print \"Denominator value set: \", ' ',d\n", "f.GetValue(n,d) #call function GetData\n", "print \"Numerator value retrieved: \", ' ',n\n", "print \"Denominator value retrieved: \", ' ',d\n", "print \"Now a second clone copy is being created: \",''\n", "f1=f\n", "f1.GetValue(n,d)\n", "print \"Clone's numerator value retrieved: \", ' ',n\n", "print \"Clone's denominator value retrieved: \", ' ',d" ], "language": "python", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter n: 5\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Enter d: 6\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "enter the numerator and denominator: 5 6\n", "Numerator value set: 5\n", "Denominator value set: 6\n", "Numerator value retrieved: 5\n", "Denominator value retrieved: 6\n", "Now a second clone copy is being created: \n", "Clone's numerator value retrieved: 5\n", "Clone's denominator value retrieved: 6\n" ] } ], "prompt_number": 1 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Program Source Code 8.9, page no:229" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def MyNewHandler():\n", " print \"Sorry operator new failed to allocate memory\"\n", " exit(0)\n", " \n", "def _set_new_handler(s):\n", " s()\n", "#In python there is no in-built _set_new_handler function, so i made this function and passed MyNewHandler function as a parameters\n", "_set_new_handler(MyNewHandler)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Sorry operator new failed to allocate memory\n" ] } ], "prompt_number": 1 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Program Source Code 8.10, page no:230" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from ctypes import * \n", "class Fraction: \n", " def __init__(self,a=0,b=1): \n", " if isinstance(a,int): \n", " c = c_int(a) \n", " d = c_int(b) \n", " self.__num = pointer(c) \n", " self.__denom = pointer(d) \n", " print 'constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n", " else:\n", " c=c_int(a.__num[0])\n", " d = c_int(a.__denom[0])\n", " self.__num = pointer(c) \n", " self.__denom = pointer(d)\n", " print 'copy constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n", " \n", " def __del__(self): \n", " print 'destructor deallocates numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n", " \n", "n = input(\"Please enter values of numerator: \") \n", "d = input(\"Please enter values of denominator: \") \n", "f = Fraction(n,d) \n", "print 'Please enter another set of ' \n", "n = input(\"numerator: \") \n", "d = input(\"denominator: \") \n", "print 'Creating fraction *pf : ' \n", "pf = Fraction(n,d) \n", "print 'Now a clone copy (f2) created from *pf: ' \n", "f2 = Fraction(pf)\n", "print 'Now another clone copy (*pf2) created from f:' \n", "pf2 = Fraction(f) \n", "print '*pf2 is being destroyed:' \n", "del pf2\n", "print '*pf is being destroyed:' \n", "del pf \n", "print 'now objects f2 and f automatically destroyed : '" ], "language": "python", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Please enter values of numerator: 3\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "Please enter values of denominator: 4\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "constructor sets numerator = 3 , denominator = 4\n", "Please enter another set of \n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "numerator: 5\n" ] }, { "name": "stdout", "output_type": "stream", "stream": "stdout", "text": [ "denominator: 6\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Creating fraction *pf : \n", "constructor sets numerator = 5 , denominator = 6\n", "Now a clone copy (f2) created from *pf: \n", "copy constructor sets numerator = 5 , denominator = 6\n", "Now another clone copy (*pf2) created from f:\n", "copy constructor sets numerator = 3 , denominator = 4\n", "*pf2 is being destroyed:\n", "*pf is being destroyed:\n", "now objects f2 and f automatically destroyed : \n" ] } ], "prompt_number": 1 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Program Source Code 8.11, page no:234" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def Memfail(self,s):\n", " print \"Sorry Unable to allocate memory\"\n", " sys.exit(0)\n", "\n", "MAX_SIZE = 60 + 1\n", "\n", "MAX_SIZE=[[0 for col in range(MAX_SIZE)]for row in range(MAX_SIZE)]\n", "nChar=0\n", "chArr=\"Hello\"\n", "\n", "print \"Please input a string( 60 characters max.): \",chArr\n", "\n", "nChar=len(chArr)+1\n", "szStr=chArr\n", "print \"required memory space for\",nChar,\n", "print \"characters\"\n", "chArr=szStr #string copy\n", "szStr=chArr\n", "print \"String copied in allocated space: \",szStr\n", "print \"Memory space dellocated\"\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Please input a string( 60 characters max.): Hello\n", "required memory space for 6 characters\n", "String copied in allocated space: Hello\n", "Memory space dellocated\n" ] } ], "prompt_number": 4 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Program Source Code 8.12, page no:236" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Fraction:\n", " \n", " def __init__(self,a=0,b=1): #constructor\n", " self.__num=a\n", " self.__denom=b\n", " \n", " def __del__(self): #destructor\n", " pass\n", " \n", " def GetValue(self,a,b):\n", " a=self.__num\n", " b=self.__denom\n", " return self.__num,self.__denom\n", "n=4\n", "d=5\n", "f=Fraction(4,5)\n", "n,d=f.GetValue(n,d)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Program Source Code 8.13, page no:239" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class X:\n", " __sa=20 #initialising static member\n", " a = None\n", " def __init__(self):\n", " self.a=None #public member\n", " def f(self,b):\n", " a=30\n", " print \"Global a= \",b\n", " print \"Local a= \",a\n", " print \"Nonstatic member a= \",self.a\n", " print \"static member sa= \",self.__sa\n", "\n", "a=10\n", "\n", "aXobj=X()\n", "aXobj.a=40\n", "aXobj.f(a)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Global a= 10\n", "Local a= 30\n", "Nonstatic member a= 40\n", "static member sa= 20\n" ] } ], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }