{ "metadata": { "name": "", "signature": "sha256:ef98399c0ca8757ac00d3fd05580844a129c7aa9be3ede3133f6fb51db06e391" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "***\n", "# 12. \ud074\ub798\uc2a4\n", "***\n", "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "## 01 \ud30c\uc774\uc36c \ud074\ub798\uc2a4\ub780?\n", "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1-1 \ud074\ub798\uc2a4\uc640 \uc774\ub984 \uacf5\uac04\n", "- \ud30c\uc774\uc36c \ud074\ub798\uc2a4\ub294 \uc0c8\ub85c\uc6b4 \uc774\ub984 \uacf5\uac04\uc744 \uc9c0\uc6d0\ud558\ub294 \ub610 \ub2e4\ub978 \ub2e8\uc704\n", "- \uc778\uc2a4\ud134\uc2a4: \ud074\ub798\uc2a4\ub85c \ubd80\ud130 \ub9cc\ub4e4\uc5b4\ub0b8 \uac1d\uccb4\n", "- \ubaa8\ub4c8 vs. \ud074\ub798\uc2a4 vs. \uc778\uc2a4\ud134\uc2a4\n", " - \ubaa8\ub4c8: \ud30c\uc77c \ub2e8\uc704\ub85c \uc774\ub984 \uacf5\uac04\uc744 \uad6c\uc131\n", " - \ud074\ub798\uc2a4: \ud074\ub798\uc2a4 \uc601\uc5ed \ub0b4\uc5d0 \uc774\ub984 \uacf5\uac04\uc744 \uad6c\uc131\n", " - \uc778\uc2a4\ud134\uc2a4: \uc778\uc2a4\ud134\uc2a4 \uc601\uc5ed \ub0b4\uc5d0 \uc774\ub984 \uacf5\uac04\uc744 \uad6c\uc131" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class S1:\n", " a = 1\n", " \n", "print S1.a\n", "print\n", "\n", "S1.b = 2 # \ud074\ub798\uc2a4 \uc774\ub984 \uacf5\uac04\uc5d0 \uc0c8\ub85c\uc6b4 \uc774\ub984\uc758 \uc0dd\uc131\n", "print S1.b\n", "print\n", "\n", "print dir(S1) # S1\uc5d0 \ud3ec\ud568\ub41c \uc774\ub984\ub4e4\uc744 \ub9ac\uc2a4\ud2b8\ub85c \ubc18\ud658\n", "del S1.b # \uc774\ub984 \uacf5\uac04 S1\uc5d0\uc11c b\uc0ad\uc81c\n", "print dir(S1)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1\n", "\n", "2\n", "\n", "['__doc__', '__module__', 'a', 'b']\n", "['__doc__', '__module__', 'a']\n" ] } ], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "x = S1() # x\ub294 S1\uc758 \ud074\ub798\uc2a4 \uc778\uc2a4\ud134\uc2a4\n", "print x.a\n", "\n", "x.a = 10 # \ud074\ub798\uc2a4 \uc778\uc2a4\ud134\uc2a4 x\uc758 \uc774\ub984 \uacf5\uac04\uc5d0 \uc774\ub984 \uc0dd\uc131\n", "print x.a\n", "\n", "print S1.a # \ud074\ub798\uc2a4 \uc774\ub984 \uacf5\uac04\uacfc \ud074\ub798\uc2a4 \uc778\uc2a4\ud134\uc2a4\uc758 \uc774\ub984\uacf5\uac04\uc740 \ub2e4\ub974\ub2e4" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1\n", "10\n", "1\n" ] } ], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "y = S1() # S1 \ud074\ub798\uc2a4\uc758 \ub610 \ub2e4\ub978 \uc778\uc2a4\ud134\uc2a4 \uc0dd\uc131\n", "\n", "y.a = 300 # \ud074\ub798\uc2a4 \uc778\uc2a4\ud134\uc2a4 y\uc758 \uc774\ub984 \uacf5\uac04\uc5d0 \uc774\ub984 \uc0dd\uc131\n", "\n", "print y.a \n", "print x.a # x \uc778\uc2a4\ud134\uc2a4 \uacf5\uac04\uc758 \uc774\ub984 a \ud655\uc778\n", "print S1.a # \ud074\ub798\uc2a4 \uc774\ub984 \uacf5\uac04\uc758 a \ud655\uc778" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "300\n", "10\n", "1\n" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1-2 \uc0c1\uc18d(Inheritance)\n", "- \uc0c1\uc704(\uc288\ud37c) \ud074\ub798\uc2a4\ub294 \ud558\uc704(\uc11c\ube0c) \ud074\ub798\uc2a4\uc758 \uc774\ub984 \uacf5\uac04\uc5d0 \ud3ec\ud568\ub428" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Parent:\n", " a = 10\n", " def f(self):\n", " print 'base'\n", "\n", "class Child(Base): # \ud074\ub798\uc2a4 Parent\uc758 \uc18d\uc131\uc744 \ubaa8\ub450 \uc0c1\uc18d\ubc1b\ub294\ub2e4.\n", " b = 100\n", " pass\n", "\n", "d = Child() \n", "d.f() # Parent \ud074\ub798\uc2a4\uc758 \uba54\uc18c\ub4dc f\uac00 \ud638\ucd9c\ub41c\ub2e4.\n", "print d.a\n", "print d.b" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "base\n", "10\n", "100\n" ] } ], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "![inheritance](images/inheritance.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1-3 \uc5f0\uc0b0\uc790 \uc911\ubcf5 (Operator Overloading)\n", "- \uc5f0\uc0b0\uc790 \uc911\ubcf5: \uac01 \ud074\ub798\uc2a4 \uac1d\uccb4\uc5d0 \uac01\uc885 \uc5f0\uc0b0\uc790(+, -, *, /)\uac00 \uc218\ud589\ub418\uac8c\ub054 \uadf8\ub7ec\ud55c \uc5f0\uc0b0\uc790\ub4e4\uc5d0 \ub300\uc751\ub418\ub294 \ud568\uc218\ub97c \uc815\uc758\ud558\ub294 \uac83\n", "- [\ucc38\uace0]: http://blog.eairship.kr/m/post/287" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class MyClass:\n", " pass\n", "\n", "a = MyClass()\n", "print a + 3" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "TypeError", "evalue": "unsupported operand type(s) for +: 'instance' and 'int'", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0ma\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mMyClass\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0;32mprint\u001b[0m \u001b[0ma\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: unsupported operand type(s) for +: 'instance' and 'int'" ] } ], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "class MyClass:\n", " def __add__(self, x): # \uc774\ub984 __add__\ub294 + \uc5f0\uc0b0\uc790\ub97c Overloading\ud55c\ub2e4.\n", " print 'add %s called' %x\n", " return x\n", " \n", "a = MyClass()\n", "print a + 3 # \ub354\ud558\uae30 \uc5f0\uc0b0\uc790\uac00 \uc801\uc6a9\ub418\uc5b4 \ud638\ucd9c\ub428\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "add 3 called\n", "3\n" ] } ], "prompt_number": 13 }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "## 02 \ud074\ub798\uc2a4 \uc815\uc758 \ubc0f \uc778\uc2a4\ud134\uc2a4 \uac1d\uccb4 \uc0dd\uc131\n", "***\n", "- \ud074\ub798\uc2a4 \uc815\uc758 \uad6c\ubb38\n", "> class \ud074\ub798\uc2a4 \uc774\ub984: #\ud5e4\ub354(Header)
\n", ">         pass #\ubab8\uccb4(Body)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ud074\ub798\uc2a4 \uc778\uc2a4\ud134\uc2a4 \uc0dd\uc131" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Simple:\n", " pass\n", "\n", "s1 = Simple()\n", "s2 = Simple()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ud30c\uc774\uc36c\uc5d0\uc11c\ub294 \ub3d9\uc801\uc73c\ub85c \uc778\uc2a4\ud134\uc2a4 \uc678\ubd80\uc5d0\uc11c \uc778\uc2a4\ud134\uc2a4 \uba64\ubc84\ub97c \ucd94\uac00\ud560 \uc218 \uc788\uc74c\n", " - \ud30c\uc774\uc36c\uc5d0\uc11c\ub294 \ud074\ub798\uc2a4\ub97c \ud558\ub098\uc758 \uc774\ub984 \uacf5\uac04\uc73c\ub85c \ucde8\uae09\ud568" ] }, { "cell_type": "code", "collapsed": false, "input": [ "s1.stack = [] # \ub3d9\uc801\uc73c\ub85c \ud074\ub798\uc2a4 \uc778\uc2a4\ud134\uc2a4 \uc774\ub984 \uacf5\uac04 \uc548\uc5d0 \uc0c8\ub85c\uc6b4 \ubcc0\uc218(\uc774\ub984) stack \uc0dd\uc131\n", "s1.stack.append(1) # \uac12 \ucd94\uac00\n", "s1.stack.append(2)\n", "s1.stack.append(3)\n", "\n", "print s1.stack #\ucd9c\ub825\n", "print s1.stack.pop() #pop\n", "print s1.stack.pop()\n", "print\n", "print s1.stack #\ucd5c\uc885 s1.stack\uac12\n", "print s2.stack #s2\uc5d0\ub294 stack \uc744 \uc815\uc758\ud55c \uc801\uc774 \uc5c6\ub2e4.\n" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "NameError", "evalue": "name 's1' is not defined", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0ms1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstack\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;31m# \ub3d9\uc801\uc73c\ub85c \ud074\ub798\uc2a4 \uc778\uc2a4\ud134\uc2a4 \uc774\ub984 \uacf5\uac04 \uc548\uc5d0 \uc0c8\ub85c\uc6b4 \ubcc0\uc218(\uc774\ub984) stack \uc0dd\uc131\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0ms1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstack\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# \uac12 \ucd94\uac00\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0ms1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstack\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0ms1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstack\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mNameError\u001b[0m: name 's1' is not defined" ] } ], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "![inheritance](images/instance.png)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "del s1.stack # s1\uc5d0\uc11c stack\uc0ad\uc81c" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 26 }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "## 03 \uba54\uc3d8\ub4dc\uc758 \uc815\uc758\uc640 \ud638\ucd9c\n", "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3-1 \uc77c\ubc18 \uba54\uc3d8\ub4dc\uc758 \uc815\uc758\uc640 \ud638\ucd9c" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ud074\ub798\uc2a4 \ub0b4\ubd80\uc5d0 \uba54\uc18c\ub4dc \uc120\uc5b8 - def \ud0a4\uc6cc\ub4dc \uc0ac\uc6a9\n", " - \uc77c\ubc18 \ud568\uc218\uc640 \ub2e4\ub978 \uc810\uc740 \uccab\ubc88\uc9f8 \uc778\uc218\ub85c self \uc0ac\uc6a9 (self\ub77c\ub294 \uc774\ub984\uc740 \uad00\ub840\uc801)\n", " - self: \uc778\uc2a4\ud134\uc2a4 \uac1d\uccb4 \uc790\uc2e0\uc758 \ub808\ud37c\ub7f0\uc2a4\ub97c \uc9c0\ub2c8\uace0 \uc788\uc74c\n", " - \uac01 \uc778\uc2a4\ud134\uc2a4\ub4e4\uc740 self\ub97c \uc774\uc6a9\ud558\uc5ec \uc790\uc2e0\uc758 \uc774\ub984 \uacf5\uac04\uc5d0 \uc811\uadfc " ] }, { "cell_type": "code", "collapsed": false, "input": [ "#class01.py\n", "class MyClass:\n", " def set(self, v):\n", " self.value = v\n", " def get(self):\n", " return self.value" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uc778\uc2a4\ud134\uc2a4 \uac1d\uccb4\ub97c \ud1b5\ud558\uc5ec \uba54\uc18c\ub4dc\ub97c \ud638\ucd9c\ud560 \ub54c self \uc778\uc790\ub294 \uc5c6\ub2e4\uace0 \uc0dd\uac01" ] }, { "cell_type": "code", "collapsed": false, "input": [ "c = MyClass() # \uc778\uc2a4\ud134\uc2a4 \uc0dd\uc131 \n", "c.set('egg') # \uba54\uc18c\ub4dc set \ud638\ucd9c\n", "print c.get() # \uba54\uc18c\ub4dc put \ud638\ucd9c\n", "print c.value # \uc778\uc2a4\ud134\uc2a4 \ubcc0\uc218\uc5d0 \uc9c1\uc811 \uc811\uadfc" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "egg\n", "egg\n" ] } ], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uc704 \ucf54\ub4dc\ub294 \uc2e4\uc81c\ub85c \uc544\ub798 \ucf54\ub4dc\uc640 \ub3d9\uc77c\ud568" ] }, { "cell_type": "code", "collapsed": false, "input": [ "c = MyClass() # \uc778\uc2a4\ud134\uc2a4 \uc0dd\uc131 \n", "MyClass.set(c, 'egg')\n", "print MyClass.get(c)\n", "print c.value" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "egg\n", "egg\n" ] } ], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "class Simple:\n", " pass\n", "\n", "c = MyClass()\n", "s1 = Simple()\n", "MyClass.set(s1, 'egg') # \ub2e4\ub978 \ud074\ub798\uc2a4\uc758 \uc778\uc2a4\ud134\uc2a4\ub97c \ub123\uc5b4\uc8fc\uba74 \uc5d0\ub7ec \ubc1c\uc0dd" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "TypeError", "evalue": "unbound method set() must be called with MyClass instance as first argument (got Simple instance instead)", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mMyClass\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0ms1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mSimple\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0mMyClass\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ms1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'egg'\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# \ub2e4\ub978 \ud074\ub798\uc2a4\uc758 \uc778\uc2a4\ud134\uc2a4\ub97c \ub123\uc5b4\uc8fc\uba74 \uc5d0\ub7ec \ubc1c\uc0dd\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: unbound method set() must be called with MyClass instance as first argument (got Simple instance instead)" ] } ], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uba54\uc18c\ub4dc \ud638\ucd9c \uc885\ub958\n", " - Unbound (class) method call: \ud074\ub798\uc2a4 \uac1d\uccb4\ub97c \uc774\uc6a9\ud55c \uba54\uc18c\ub4dc \ud638\ucd9c\n", " - \uc608: MyClass.set(c, 'egg')\n", " - Bound (instance) method call: \uc778\uc2a4\ud134\uc2a4 \uac1d\uccb4\ub97c \ud1b5\ud55c \uba54\uc18c\ub4dc \ud638\ucd9c (self \uc778\uc790\ub294 \ud638\ucd9c\ubc1b\uc740 \uac1d\uccb4\uac00 \uc790\ub3d9\uc73c\ub85c \ud560\ub2f9)\n", " - \uc608: c.set('egg')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3-2 \ud074\ub798\uc2a4 \ub0b4\ubd80\uc5d0\uc11c\uc758 \uba54\uc3d8\ub4dc \ud638\ucd9c" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class MyClass:\n", " def set(self, v):\n", " self.value = v\n", " def incr(self):\n", " self.set(self.value + 1) # \ub0b4\ubd80 \uba54\uc18c\ub4dc \ud638\ucd9c\n", " def get(self):\n", " return self.value\n", " \n", "c = MyClass()\n", "c.set(1)\n", "print c.get()\n", "\n", "print\n", "\n", "c.incr()\n", "print c.get()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1\n", "\n", "2\n" ] } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ub9cc\uc57d \uc704 \ucf54\ub4dc\uc5d0\uc11c self.set(self.value + 1)\ub97c set(self.value + 1)\uc73c\ub85c \ubc14\uafb8\uba74 set \ud568\uc218\ub97c \uc815\uc801 \uc601\uc5ed\uc5d0\uc11c \ucc3e\ub294\ub2e4. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "def set(i):\n", " print \"set function outside function - \", i\n", " \n", "class MyClass:\n", " def set(self, v):\n", " self.value = v\n", " def incr(self):\n", " set(self.value + 1) # \uc815\uc801 \uc601\uc5ed\uc5d0 \uc874\uc7ac\ud558\ub294 set \uba54\uc18c\ub4dc \ud638\ucd9c\n", " def get(self):\n", " return self.value\n", " \n", "c = MyClass()\n", "c.set(1)\n", "print c.get()\n", "\n", "print\n", "\n", "c.incr()\n", "print c.get()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1\n", "\n", "set function outside function - 2\n", "1\n" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3-3 \uc815\uc801 \uba54\uc18c\ub4dc(static method)\n", "- \uc815\uc801 \uba54\uc18c\ub4dc: \uc778\uc2a4\ud134\uc2a4 \uac1d\uccb4\uc640 \ubb34\uad00\ud558\uac8c \uc77c\ubc18\uc801\uc73c\ub85c \ud074\ub798\uc2a4 \uc774\ub984\uc744 \uc774\uc6a9\ud558\uc5ec \uc9c1\uc811 \ud638\ucd9c\ud560 \uc218 \uc788\ub294 \uba54\uc18c\ub4dc\n", " - [\uc8fc\uc758] \ud574\ub2f9 \ud074\ub798\uc2a4\uc758 \uc778\uc2a4\ud134\uc2a4\ub97c \ud1b5\ud574\uc11c\ub3c4 \ud638\ucd9c \uac00\ub2a5\n", "- \ub0b4\uc7a5 \ud568\uc218 staticmethod() \ud639\uc740 \uc7a5\uc2dd\uc790(Decorator) @staticmethod \ud65c\uc6a9 " ] }, { "cell_type": "code", "collapsed": false, "input": [ "class D:\n", " def spam(x, y): # self\uac00 \uc5c6\ub2e4.\n", " print 'static method', x, y\n", " spam = staticmethod(spam) # static method\ub85c \ub4f1\ub85d, \uc88c\ubcc0\uc758 \uc774\ub984\uc774 \uc815\uc801 \uba54\uc18c\ub4dc\uc758 \uc774\ub984\uc774\ub2e4.\n", " \n", "D.spam(1,2) # \uc778\uc2a4\ud134\uc2a4 \uac1d\uccb4 \uc5c6\uc774 \ud074\ub798\uc2a4\uc5d0\uc11c \uc9c1\uc811 \ud638\ucd9c\n", "\n", "print\n", "d = D()\n", "d.spam(1,2) # \uc778\uc2a4\ud134\uc2a4 \uac1d\uccb4\ub97c \ud1b5\ud574\uc11c\ub3c4 \ud638\ucd9c \uac00\ub2a5" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "static method 1 2\n", "\n", "static method 1 2\n" ] } ], "prompt_number": 34 }, { "cell_type": "code", "collapsed": false, "input": [ "class D:\n", " @staticmethod\n", " def spam(x, y): # self\uac00 \uc5c6\ub2e4.\n", " print 'static method', x, y\n", " \n", "D.spam(1,2) # \uc778\uc2a4\ud134\uc2a4 \uac1d\uccb4 \uc5c6\uc774 \ud074\ub798\uc2a4\uc5d0\uc11c \uc9c1\uc811 \ud638\ucd9c\n", "\n", "print\n", "d = D()\n", "d.spam(1,2) # \uc778\uc2a4\ud134\uc2a4 \uac1d\uccb4\ub97c \ud1b5\ud574\uc11c\ub3c4 \ud638\ucd9c \uac00\ub2a5" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "static method 1 2\n", "\n", "static method 1 2\n" ] } ], "prompt_number": 33 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3-4 \ud074\ub798\uc2a4 \uba54\uc18c\ub4dc(class method)\n", "- \ud074\ub798\uc2a4 \uba54\uc18c\ub4dc: \uc778\uc2a4\ud134\uc2a4 \uac1d\uccb4\uc640 \ubb34\uad00\ud558\uac8c \uc77c\ubc18\uc801\uc73c\ub85c \ud074\ub798\uc2a4 \uc774\ub984\uc744 \uc774\uc6a9\ud558\uc5ec \ud638\ucd9c\ud558\uba70 \uccab \uc778\uc218\ub85c \ud074\ub798\uc2a4 \uac1d\uccb4\ub97c \uc790\ub3d9\uc73c\ub85c \ubc1b\ub294 \uba54\uc18c\ub4dc\n", " - [\uc8fc\uc758] \ud574\ub2f9 \ud074\ub798\uc2a4\uc758 \uc778\uc2a4\ud134\uc2a4\ub97c \ud1b5\ud574\uc11c\ub3c4 \ud638\ucd9c \uac00\ub2a5\n", "- \ub0b4\uc7a5 \ud568\uc218 classmethod() \ud639\uc740 \uc7a5\uc2dd\uc790(Decorator) @classmethod \ud65c\uc6a9 " ] }, { "cell_type": "code", "collapsed": false, "input": [ "class C:\n", " def spam(cls, y):\n", " print cls, '->', y\n", " spam = classmethod(spam)\n", " \n", "print C\n", "\n", "print\n", "C.spam(5) # \uccab\ubc88\uc9f8 \uc778\uc218\ub85c C\uac00 \uc7a0\uc7ac\uc801\uc73c\ub85c \uc804\ub2ec\ub41c\ub2e4.\n", "\n", "print\n", "c = C()\n", "c.spam(5)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "__main__.C\n", "\n", "__main__.C -> 5\n", "\n", "__main__.C -> 5\n" ] } ], "prompt_number": 31 }, { "cell_type": "code", "collapsed": false, "input": [ "class C:\n", " @classmethod\n", " def spam(cls, y):\n", " print cls, '->', y\n", " \n", "print C\n", "\n", "print\n", "C.spam(5) # \uccab\ubc88\uc9f8 \uc778\uc218\ub85c C\uac00 \uc7a0\uc7ac\uc801\uc73c\ub85c \uc804\ub2ec\ub41c\ub2e4.\n", "\n", "print\n", "c = C()\n", "c.spam(5)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "__main__.C\n", "\n", "__main__.C -> 5\n", "\n", "__main__.C -> 5\n" ] } ], "prompt_number": 35 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uc0c1\uc18d\ubc1b\uc740 \uc11c\ube0c \ud074\ub798\uc2a4\uc744 \ud1b5\ud574 \ud638\ucd9c\ud558\uba74, \uccab \uc778\uc218\uc5d0\ub294 \uc11c\ube0c \ud074\ub798\uc2a4 \uac1d\uccb4\uac00 \uc790\ub3d9\uc73c\ub85c \ud560\ub2f9\ub428 " ] }, { "cell_type": "code", "collapsed": false, "input": [ "class D(C):\n", " pass\n", "\n", "print D.spam(3)\n", "\n", "d = D()\n", "print d.spam(3)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "__main__.D -> 3\n", "None\n", "__main__.D -> 3\n", "None\n" ] } ], "prompt_number": 32 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3-5 \uc7a5\uc2dd\uc790 (Decorator)\n", "- Skip!\n", "- [\ucc38\uace0] http://codeflow.co.kr/question/731/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%8D%B0%EC%BD%94%EB%A0%88%EC%9D%B4%ED%84%B0-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0/" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def f1(f):\n", " print 'in f1', f\n", " return f\n", "\n", "def f2(f):\n", " print 'in f2', f\n", " return f\n", "\n", "def f3(f):\n", " print 'in f3', f\n", " return f\n", "\n", "@f1\n", "@f2\n", "@f3\n", "def f():\n", " return f" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "in f3 \n", "in f2 \n", "in f1 \n" ] } ], "prompt_number": 49 }, { "cell_type": "code", "collapsed": false, "input": [ "def f1(f):\n", " print 'in f1', f\n", " return f\n", "\n", "def f2(f):\n", " print 'in f2', f\n", " return f\n", "\n", "def f3(f):\n", " print 'in f3', f\n", " return f\n", "\n", "def g():\n", " return g\n", "f1(f2(f3(g)))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "in f3 \n", "in f2 \n", "in f1 \n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 48, "text": [ "" ] } ], "prompt_number": 48 }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "## 04 \ud074\ub798\uc2a4 \uba64\ubc84\uc640 \uc778\uc2a4\ud134\uc2a4 \uba64\ubc84\n", "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ud074\ub798\uc2a4 \uba64\ubc84 vs. \uc778\uc2a4\ud134\uc2a4 \uba64\ubc84\n", " - \ud074\ub798\uc2a4 \uba64\ubc84\n", " - \ud074\ub798\uc2a4 \uc774\ub984 \uacf5\uac04\uc5d0 \uc0dd\uc131\ub428\n", " - \ubaa8\ub4e0 \uc778\uc2a4\ud134\uc2a4\ub4e4\uc5d0 \uc758\ud574 \uacf5\uc720\ub428\n", " - \uc778\uc2a4\ud134\uc2a4 \uba64\ubc84\n", " - \uc778\uc2a4\ud134\uc2a4 \uc774\ub984 \uacf5\uac04\uc5d0 \uc0dd\uc131\ub428\n", " - \uac01\uac01\uc758 \uc778\uc2a4\ud134\uc2a4 \ub9c8\ub2e4 \ub3c5\ub9bd\uc131\uc774 \ubcf4\uc7a5\ub428" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Var:\n", " c_mem = 100 # \ud074\ub798\uc2a4 \uba64\ubc84 \uc815\uc758\n", " def f(self): \n", " self.i_mem = 200 # \uc778\uc2a4\ud134\uc2a4 \uba64\ubc84 \uc815\uc758\n", " def g(self):\n", " print self.i_mem\n", " print self.c_mem" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "print Var.c_mem # \ud074\ub798\uc2a4 \uac1d\uccb4\ub97c \ud1b5\ud558\uc5ec \ud074\ub798\uc2a4 \uba64\ubc84 \uc811\uadfc\n", "\n", "v1 = Var() # \uc778\uc2a4\ud134\uc2a4 v1 \uc0dd\uc131\n", "v1.f() # \uc778\uc2a4\ud134\uc2a4 \uba64\ubc84 i_mem\uc774 \uc0dd\uc131\ub428\n", "print v1.i_mem # \uc778\uc2a4\ud134\uc2a4 v1\uc744 \ud1b5\ud558\uc5ec \uc778\uc2a4\ud134\uc2a4 \uba64\ubc84 \uc811\uadfc\n", "\n", "print\n", "v2 = Var() # \uc778\uc2a4\ud134\uc2a4 v2 \uc0dd\uc131\n", "print v2.i_mem # \uc778\uc2a4\ud134\uc2a4 v2\uc5d0\ub294 \uc544\uc9c1 f() \ud638\ucd9c\uc774 \uc548\ub418\uc5b4\uc11c i_mem \uba64\ubc84 \uc5c6\uc74c ==> \uc0dd\uc131\uc790\uc758 \ud544\uc694\uc131" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "100\n", "200\n", "\n" ] }, { "ename": "AttributeError", "evalue": "Var instance has no attribute 'i_mem'", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;32mprint\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0mv2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mVar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# \uc778\uc2a4\ud134\uc2a4 v2 \uc0dd\uc131\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 9\u001b[0;31m \u001b[0;32mprint\u001b[0m \u001b[0mv2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mi_mem\u001b[0m \u001b[0;31m# \uc778\uc2a4\ud134\uc2a4 v2\uc5d0\ub294 \uc544\uc9c1 f() \ud638\ucd9c\uc774 \uc548\ub418\uc5b4\uc11c i_mem \uba64\ubc84 \uc5c6\uc74c ==> \uc0dd\uc131\uc790\uc758 \ud544\uc694\uc131\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m: Var instance has no attribute 'i_mem'" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "![inheritance](images/instance2.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \"\uc778\uc2a4\ud134\uc2a4 \uc774\ub984.\uba64\ubc84 \uc774\ub984\"\uc73c\ub85c \uba64\ubc84\ub97c \ucc38\uc870\ud560 \ub54c \uba64\ubc84\uc758 \uac80\uc0c9 \uc21c\uc11c\n", " - 1) \uc778\uc2a4\ud134\uc2a4 \uba64\ubc84\n", " - 2) \uc778\uc2a4\ud134\uc2a4\uac00 \uc5c6\ub2e4\uba74 \ud074\ub798\uc2a4 \uba64\ubc84" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print v1.c_mem # \uc778\uc2a4\ud134\uc2a4 v1\uc744 \ud1b5\ud574 \ud074\ub798\uc2a4 \uba64\ubc84 \ucc38\uc870\n", "print v2.c_mem # \uc778\uc2a4\ud134\uc2a4 v2\ub97c \ud1b5\ud574 \ud074\ub798\uc2a4 \uba64\ubc84 \ucc38\uc870\n", "\n", "print\n", "v1.c_mem = 50 # \uc778\uc2a4\ud134\uc2a4 \uc774\ub984 \uacf5\uac04\uc5d0 c_mem\uc0dd\uc131\n", "print v1.c_mem # \uc778\uc2a4\ud134\uc2a4 v1\uc744 \ud1b5\ud574 \uc778\uc2a4\ud134\uc2a4 \uba64\ubc84 \ucc38\uc870\n", "print v2.c_mem # \uc778\uc2a4\ud134\uc2a4 v2\uc744 \ud1b5\ud574 \ud074\ub798\uc2a4 \uba64\ubc84\ucc38\uc870 (\uc778\uc2a4\ud134\uc2a4 \uba64\ubc84\uac00 \uc5c6\uc73c\ubbc0\ub85c, \ud074\ub798\uc2a4 \uba64\ubc84 \ucc38\uc870)\n", "print Var.c_mem # \ud074\ub798\uc2a4 \uba64\ubc84\ucc38\uc870" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "100\n", "100\n", "\n", "50\n", "100\n", "100\n" ] } ], "prompt_number": 60 }, { "cell_type": "markdown", "metadata": {}, "source": [ "![inheritance](images/instance3.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "## 05 \uc0dd\uc131\uc790\uc640 \uc18c\uba78\uc790\n", "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ub2e4\uc74c \uc608\uc81c\uc5d0\uc11c initialize(self)\ub294 \uc778\uc2a4\ud134\uc2a4 \uba64\ubc84\ub4e4\uc758 \ubcc0\uc218\ub97c \uc0dd\uc131\ud558\uace0 \ucd08\uae30\ud654\ud558\uae30 \uc704\ud558\uc5ec \uc815\uc758\ub428\n", "- \uac01\uac01\uc758 \uc778\uc2a4\ud134\uc2a4\uac00 \uc0dd\uc131\ub418\uba74 \uace7\ubc14\ub85c initialize() \ud568\uc218\ub97c \ud638\ucd9c\ud558\uc5ec \uc778\uc2a4\ud134\uc2a4 \uba64\ubc84 \ucd08\uae30\ud654 \uacfc\uc815\uc774 \ud544\uc694\ud568\n", "- \ub9cc\uc57d \uc0dd\uc131\ud574\uc57c \ud560 \uac1d\uccb4\uac00 \ub9ce\ub2e4\uba74 \uac01\uac01\uc758 \uac1d\uccb4\ub9c8\ub2e4 initialize() \ud568\uc218\uac00 \ud638\ucd9c\ub418\uc5b4\uc57c \ud558\ubbc0\ub85c \ubc88\uac70\ub86d\ub2e4. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Const:\n", " def initialize(self):\n", " self.hand = 2\n", " self.foot = 2\n", " self.eye = 2\n", " def print_info(self):\n", " print 'hands=%s foot=%s eyes=%s' % (self.hand, self.foot, self.eye)\n", " \n", "c = Const()\n", "c.initialize()\n", "c.print_info()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "hands=2 foot=2 eyes=2\n" ] } ], "prompt_number": 58 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \\_\\_init__: \uc0dd\uc131\uc790 \uba54\uc18c\ub4dc\n", " - \uac1d\uccb4\uac00 \uc0dd\uc131\ub420 \ub54c \uc790\ub3d9\uc73c\ub85c \ubd88\ub9ac\uc5b4\uc9c0\ub294 \uba54\uc18c\ub4dc\n", "- \\_\\_del__: \uc18c\uba78\uc790 \uba54\uc18c\ub4dc\n", " - \uac1d\uccb4\uac00 \uc18c\uba78 (\uba54\ubaa8\ub9ac\uc5d0\uc11c \ud574\uc81c)\ub420 \ub54c \uc790\ub3d9\uc73c\ub85c \ubd88\ub9ac\uc5b4\uc9c0\ub294 \uba54\uc18c\ub4dc\n", " - \uac1c\ubc1c\uc790\uac00 \ud2b9\ubcc4\ud788 \uc791\uc131\ud558\uc9c0 \uc54a\uc544\ub3c4 \ub420 \uba54\uc18c\ub4dc\n", " - \uc774\uc720: \ud30c\uc774\uc36c\uc5d0\uc11c\ub294 \uba54\ubaa8\ub9ac\ub098 \uae30\ud0c0 \uc790\uc6d0\ub4e4\uc758 \ud574\uc81c\uac00 \uc790\ub3d9\uc73c\ub85c \ub418\uae30 \ub54c\ubb38\uc5d0\n", "- [\ucc38\uace0] \\_\\_ (\uc5f0\uc18d\ub41c \ub450 \uac1c\uc758 \uc5b8\ub354\ub77c\uc778)\uc758 \uc758\ubbf8: \uc608\uc57d\ub41c \uc774\ub984" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ub2e4\uc74c \ucf54\ub4dc\uc5d0 \ub300\ud55c \uc124\uba85\n", " - mylife = Life() \ub85c\uc11c \uc778\uc2a4\ud134\uc2a4 mylife\uac00 \uc0dd\uc131\ub418\ub294 \uc21c\uac04 \\_\\_init__ \uc0dd\uc131\uc790 \uba54\uc18c\ub4dc \ud638\ucd9c\n", " - sleep(3)\uc5d0 \uc758\ud574 3\ucd08\uac04 sleep \uc0c1\ud0dc\n", " - 3\ucd08 \uc774\ud6c4 \ud568\uc218\uac00 \ub9ac\ud134\ub428 --> \ub85c\uceec \ubcc0\uc218\uac00 \uba54\ubaa8\ub9ac\uc5d0\uc11c \ud574\uc81c\ub428 --> \\_\\_del__ \uc18c\uba78\uc790 \uba54\uc18c\ub4dc \ud638\ucd9c" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# _*_ coding:utf-8 _*_\n", "from time import ctime, sleep\n", "\n", "class Life:\n", " def __init__(self): # \uc0dd\uc131\uc790\n", " self.birth = ctime() # \ud604\uc7ac\uc2dc\uac04\uc5d0 \ub300\ud55c \ubb38\uc790\uc5f4\uc744 \uc5bb\ub294\ub2e4.\n", " print 'Birthday', self.birth # \ud604\uc7ac \uc2dc\uac04 \ucd9c\ub825\n", " def __del__(self): # \uc18c\uba78\uc790\n", " print 'Deathday', ctime() # \uc18c\uba78 \uc2dc\uac04 \ucd9c\ub825 \n", "\n", "def test():\n", " mylife = Life()\n", " print 'Sleeping for 3 sec'\n", " sleep(3) #3\ucd08\uac04 sleep(block)\uc0c1\ud0dc\uc5d0 \uc788\uc74c (CPU \uc810\uc720 \ubabb\ud568)\n", "\n", "test()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Birthday Thu Nov 6 21:51:25 2014\n", "Sleeping for 3 sec\n", "Deathday" ] }, { "output_type": "stream", "stream": "stdout", "text": [ " Thu Nov 6 21:51:28 2014\n" ] } ], "prompt_number": 66 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uc778\uc790\ub97c \ubc1b\ub294 \uc0dd\uc131\uc790 \ud638\ucd9c \uac00\ub2a5\n", "- [\ucc38\uace0] \\_\\_str\\_\\_: print \uc608\uc57d\uc5b4\ub098 str() \ub0b4\uc7a5\ud568\uc218 \ud638\ucd9c\uc5d0 \ub300\uc751\ub418\ub294 \uba54\uc18c\ub4dc" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Integer:\n", " def __init__(self, i):\n", " self.i = i\n", " def __str__(self):\n", " return str(self.i)\n", "\n", "i = Integer(10)\n", "print i\n", "print str(i)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "10\n", "10\n" ] } ], "prompt_number": 73 }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "## 06 \uc5f0\uc0b0\uc790 \uc911\ubcf5(operator overloading)\n", "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6-1 \uc218\uce58 \uc5f0\uc0b0\uc790 \uc911\ubcf5\n", "- \uc9c1\uc811 \uc815\uc758\ud558\ub294 \ud074\ub798\uc2a4 \uc778\uc2a4\ud134\uc2a4\uc5d0 \uc5f0\uc0b0\uc790\ub97c \uc801\uc6a9\ud558\uae30 \uc704\ud558\uc5ec \ubbf8\ub9ac \uc57d\uc18d\ub418\uc5b4 \uc788\ub294 \uba54\uc18c\ub4dc\ub4e4\uc744 \uc815\uc758" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "

\uba54\uc18c\ub4dc(Method)

\uc5f0\uc0b0\uc790(Operator)

\uc778\uc2a4\ud134\uc2a4 o\uc5d0 \ub300\ud55c \uc0ac\uc6a9 \uc608

\\_\\_add\\_\\_(self, B)

+ (\uc774\ud56d)

o + B, o += B

\\_\\_sub\\_\\_(self, B)

- (\uc774\ud56d)

o - B, o -= B

\\_\\_mul\\_\\_(self, B)

\\*

o \\* B, o \\*= B

\\_\\_div\\_\\_(self, B)

/

o / B, o /= B

\\_\\_floordiv\\_\\_(self, B)

//

o // B, o //= B

\\_\\_mod\\_\\_(self, B)

%

o % B, o %= B

\\_\\_divmod\\_\\_(self, B)

divmod()

divmod(o, B)

\\_\\_pow\\_\\_(self, B)

pow(), \\*\\*

pow(o, B), o \\*\\* B

\\_\\_lshift\\_\\_(self, B)

<<

o << B, o <<= B

\\_\\_rshift\\_\\_(self, B)

>>

o >> B, o >>= B

\\_\\_and\\_\\_(self, B)

&

o & B, o &= B

\\_\\_xor\\_\\_(self, B)

^

o ^ B, o ^= B

\\_\\_or\\_\\_(self, B) 

|

o | B, o |= B

\\_\\_neg\\_\\_(self)

- (\ub2e8\ud56d)

-A

\\_\\_abs\\_\\_(self)

abs()

abs(o)

\\_\\_pos\\_\\_(self)

+ (\ub2e8\ud56d)

+o

\\_\\_invert\\_\\_(self)

~

~o

" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Integer:\n", " def __init__(self, i):\n", " self.i = i\n", " def __str__(self):\n", " return str(self.i)\n", " def __add__(self, other):\n", " return self.i + other\n", "\n", "i = Integer(10)\n", "print i\n", "print str(i)\n", "\n", "print\n", "i = i + 10\n", "print i\n", "\n", "print\n", "i += 10\n", "print i" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "10\n", "10\n", "\n", "20\n", "\n", "30\n" ] } ], "prompt_number": 75 }, { "cell_type": "code", "collapsed": false, "input": [ "class MyString:\n", " def __init__(self, str):\n", " self.str = str\n", " def __div__(self, sep): # \ub098\ub204\uae30 \uc5f0\uc0b0\uc790 /\uac00 \uc0ac\uc6a9\ub418\uc5c8\uc744 \ub54c \ud638\ucd9c\ub418\ub294 \ud568\uc218 \n", " return self.str.split(sep) # \ubb38\uc790\uc5f4 self.str\uc744 sep\ub97c \uae30\uc900\uc73c\ub85c \ubd84\ub9ac\n", "\n", "m = MyString(\"abcd_abcd_abcd\")\n", "print m / \"_\"\n", "print m / \"_a\"\n", "\n", "print\n", "print m.__div__(\"_\")" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "['abcd', 'abcd', 'abcd']\n", "['abcd', 'bcd', 'bcd']\n", "\n", "['abcd', 'abcd', 'abcd']\n" ] } ], "prompt_number": 85 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uc5f0\uc0b0\uc790 \uc67c\ucabd\uc5d0 \ud53c\uc5f0\uc0b0\uc790, \uc5f0\uc0b0\uc790 \uc624\ub978\ucabd\uc5d0 \uac1d\uccb4\uac00 \uc624\ub294 \uacbd\uc6b0\n", " - \uba54\uc18c\ub4dc \uc774\ub984 \uc55e\uc5d0 r\uc774 \ucd94\uac00\ub41c \uba54\uc18c\ub4dc \uc815\uc758" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class MyString:\n", " def __init__(self, str):\n", " self.str = str\n", " def __div__(self, sep):\n", " return str.split(self.str, sep)\n", " __rdiv__ = __div__\n", "\n", "m = MyString(\"abcd_abcd_abcd\")\n", "print m / \"_\"\n", "print m / \"_a\"\n", "print\n", "print \"_\" / m\n", "print \"_a\" / m" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "['abcd', 'abcd', 'abcd']\n", "['abcd', 'bcd', 'bcd']\n", "\n", "['abcd', 'abcd', 'abcd']\n", "['abcd', 'bcd', 'bcd']\n" ] } ], "prompt_number": 87 }, { "cell_type": "code", "collapsed": false, "input": [ "class MyString:\n", " def __init__(self, str):\n", " self.str = str\n", " def __div__(self, sep):\n", " return str.split(self.str, sep)\n", " __rdiv__ = __div__\n", " def __neg__(self):\n", " t = list(self.str)\n", " t.reverse()\n", " return ''.join(t)\n", " __invert__ = __neg__\n", " \n", "m = MyString(\"abcdef\")\n", "print -m\n", "print ~m" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "fedcba\n", "fedcba\n" ] } ], "prompt_number": 90 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \\_\\_coerce\\_\\_ \uba54\uc18c\ub4dc\n", " - \uac1d\uccb4\uc640 \ud53c\uc5f0\uc0b0\uc790\uc5d0 \uc218\uce58 \uc5f0\uc0b0\uc790\uac00 \ud638\ucd9c\ub418\uba74 \uc6b0\uc120\uc801\uc73c\ub85c \ud638\ucd9c\ub418\ub294 \uba54\uc18c\ub4dc\n", " - \\_\\_coerce\\_\\_\ub294 \ubcf4\ud1b5 \ub450 \uac1c\uc758 \uac1d\uccb4\ub97c \ub9ac\ud134\n", " - \ub9ac\ud134\ub41c \ub450 \uac1c\uc758 \uac1d\uccb4\uc5d0 \ub300\ud574 \ud638\ucd9c\ub41c \uc5f0\uc0b0\uc744 \uc801\uc6a9\ud574 \ubcf4\uace0 \uc801\uc6a9\uc774 \uc62c\ubc14\ub85c \ub41c\ub2e4\uba74 \uc801\uc6a9\ub41c \uc5f0\uc0b0 \uacb0\uacfc\uac00 \ub9ac\ud134\ub428 " ] }, { "cell_type": "code", "collapsed": false, "input": [ "class MyNum:\n", " def __init__(self, n):\n", " self.n = n\n", " def __coerce__(self, y):\n", " return self.n, y # (\uc22b\uc790, \uc22b\uc790)\uc758 \ub9ac\ud134\n", "\n", "a = MyNum(10)\n", "print a + 20\n", "print a * 30\n", "print a / 2\n", "print a % 2\n", "print divmod(a, 3)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "30\n", "300\n", "5\n", "0\n", "(3, 1)\n" ] } ], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \\_\\_coerce\\_\\_ \uba54\uc18c\ub4dc\uac00 \uc62c\ubc14\ub978 \uac1d\uccb4 \ub450\uac1c\ub97c \ub9ac\ud134\ud558\uc9c0 \uc54a\uc73c\uba74 \uc6d0\ub798 \ubc29\uc2dd\ub300\ub85c \\_\\_add\\_\\_ \ub4f1\uc758 \uba54\uc18c\ub4dc\uac00 \ud638\ucd9c\ub428" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class MyNum:\n", " def __init__(self, n):\n", " self.n = n\n", " def __coerce__(self, y):\n", " return self, y # (\uac1d\uccb4, \uc22b\uc790)\uc758 \ub9ac\ud134\n", " def __add__(self, y):\n", " print 'add called'\n", " return self.n + y \n", " \n", "x = MyNum(12)\n", "print x + 4" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "add called\n", "16\n" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6-2 \uc2dc\ud000\uc2a4/\ub9e4\ud551 \uc790\ub8cc\ud615\uc758 \uc5f0\uc0b0\uc790 \uc911\ubcf5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ud074\ub798\uc2a4\ub97c \uac1c\ubc1c\ud560 \ub54c \ub2e4\uc74c \uba54\uc18c\ub4dc\ub4e4\uc744 \uc801\uc808\ud558\uac8c \uad6c\ud604\ud558\uba74 \uc790\uc2e0\ub9cc\uc758 \uc2dc\ud000\uc2a4 \uc790\ub8cc\ud615\uc744 \ub9cc\ub4e4 \uc218 \uc788\uc74c\n", "- \ubcc0\uacbd\ubd88\uac00\ub2a5\ud55c (Immutable) \uc2dc\ud000\uc2a4 \uc790\ub8cc\ud615 \ubc0f \ub9e4\ud551 \uc790\ub8cc\ud615\uc744 \uc704\ud574 \uad6c\ud604\uc774 \ud544\uc694\ud55c \uba54\uc18c\ub4dc" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "|\uba54\uc18c\ub4dc |\uc5f0\uc0b0\uc790 |\n", "|---|---|\n", "|\\_\\_len\\_\\_(self) | len() |\n", "|\\_\\_contains\\_\\_(self, item) | item in self |\n", "|\\_\\_getItem\\_\\_(self, key) | self[key] |\n", "|\\_\\_setItem\\_\\_(self, key, value) | self[key] = value |\n", "|\\_\\_delItem\\_\\_(self, key) | del self(key) |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1) \uc778\ub371\uc2f1 (Indexing)\n", "- len(s1) --> s1.\\_\\_len\\_\\_() \uba54\uc18c\ub4dc \ud638\ucd9c\n", "- sl[4] --> s1.\\_\\_getitem\\_\\_(4) \ud638\ucd9c\n", "- IndexError\n", " - \uc2dc\ud000\uc2a4 \uc790\ub8cc\ud615\uc774 \ubc94\uc704\ub97c \ubc97\uc5b4\ub09c \uc778\ub371\uc2a4 \ucc38\uc870 \uc694\uad6c\uc2dc\uc5d0 \ubc1c\uc0dd\ub428\n", " - \ub9ac\uc2a4\ud2b8, \ud29c\ud50c, \ubb38\uc790\uc5f4\ub4f1\uc5d0\uc11c\ub3c4 \ub3d9\uc77c\ud55c \uc870\uac74\uc5d0\uc11c \ubc1c\uc0dd\ub428 " ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Square:\n", " def __init__(self, end):\n", " self.end = end\n", " def __len__(self):\n", " return self.end\n", " def __getitem__(self, k):\n", " if k < 0 or self.end <= k: \n", " raise IndexError, k\n", " return k * k\n", " \n", "s1 = Square(10)\n", "print len(s1) # s1.__len__()\n", "print s1[1] # s1.__getitem__(1)\n", "print s1[4]\n", "print s1[20]\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "10\n", "1\n", "16\n" ] }, { "ename": "IndexError", "evalue": "20", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0;32mprint\u001b[0m \u001b[0ms1\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;31m#s1.__getitem__(1)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[0;32mprint\u001b[0m \u001b[0ms1\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 15\u001b[0;31m \u001b[0;32mprint\u001b[0m \u001b[0ms1\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m20\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, k)\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__getitem__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mk\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mk\u001b[0m \u001b[0;34m<\u001b[0m \u001b[0;36m0\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mend\u001b[0m \u001b[0;34m<=\u001b[0m \u001b[0mk\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mIndexError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mk\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 9\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mk\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mk\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mIndexError\u001b[0m: 20" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ub2e4\uc74c for \ubb38\uc740 s1\uc5d0 \ub300\ud574 \\_\\_getitem()\\_\\_ \uba54\uc18c\ub4dc\ub97c 0\ubd80\ud130 \ud638\ucd9c\ud558\uc5ec IndexError\uac00 \ubc1c\uc0dd\ud558\uba74 \ub8e8\ud504\ub97c \uc911\ub2e8\ud55c\ub2e4. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "for x in s1:\n", " print x," ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0 1 4 9 16 25 36 49 64 81\n" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \\_\\_getitem\\_\\_() \uba54\uc18c\ub4dc\uac00 \uc815\uc758\ub418\uc5b4 \uc788\ub2e4\uba74 \ub2e4\ub978 \uc2dc\ud000\uc2a4 \uc790\ub8cc\ud615\uc73c\ub85c \ubcc0\ud658\uc774 \uac00\ub2a5" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print list(s1)\n", "print tuple(s1)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]\n", "(0, 1, 4, 9, 16, 25, 36, 49, 64, 81)\n" ] } ], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uc704\uc5d0\uc11c \uc54c \uc218 \uc788\ub4ef\uc774 \ud30c\uc774\uc36c\uc740 \ub0b4\uc7a5 \uc790\ub8cc\ud615\uacfc \uac1c\ubc1c\uc790\uac00 \uc815\uc758\ud55c \uc790\ub8cc\ud615\uc5d0 \ub300\ud574 \uc77c\uad00\ub41c \uc5f0\uc0b0 \uc801\uc6a9\uc774 \uac00\ub2a5\n", " - \ud30c\uc774\uc36c \uc5b8\uc5b4\uc758 \uc7a5\uc810: \uc77c\uad00\ub41c \ucf54\ub529 \uc2a4\ud0c0\uc77c \uc720\uc9c0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "2) \uc2ac\ub77c\uc774\uc2f1(Slicing)\n", "- \uc6b0\uc120 slice \uac1d\uccb4\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf8\ub2e4.\n", " - slice([start,] stop [,step])" ] }, { "cell_type": "code", "collapsed": false, "input": [ "s = slice(1, 10, 2)\n", "print s \n", "print type(s) # s\uc758 \ud615(Type) \uc815\ubcf4\ub97c \uc54c\uc544\ubcf8\ub2e4\n", "print dir(s) # s\uc758 \uc18d\uc131 \ub9ac\uc2a4\ud2b8\ub97c \ubcf4\uc5ec\uc900\ub2e4." ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "slice(1, 10, 2)\n", "\n", "['__class__', '__cmp__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'indices', 'start', 'step', 'stop']\n" ] } ], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "print slice(10)\n", "print slice(1, 10)\n", "print slice(1, 10, 3)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "slice(None, 10, None)\n", "slice(1, 10, None)\n", "slice(1, 10, 3)\n" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ud560\ub2f9 \uc778\uc790\uc5d0 \ub530\ub978 \\_\\_getitem\\_\\_() \ud638\ucd9c \ud615\ud0dc\n", " - m[5]: m.\\_\\_getitem\\_\\_(5)\n", " - m[1:5]: m.\\_\\_getitem\\_\\_((slice(1,5)))\n", " - \uc989, \uac1d\uccb4 \uc2ac\ub77c\uc774\uc2f1\uc774 \ud638\ucd9c\ub418\uba74 \\_\\_getitem\\_\\_() \uba54\uc18c\ub4dc\uc5d0 \uc778\ub371\uc2f1\uc758 \uc815\uc218 \ucca8\uc790 \ub300\uc2e0\uc5d0 slice \uac1d\uccb4\uac00 \uc804\ub2ec\ub41c\ub2e4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import types\n", "class Square:\n", " def __init__(self, end):\n", " self.end = end\n", " def __len__(self):\n", " return self.end\n", " def __getitem__(self, k):\n", " if type(k) == types.IntType: # indexing\n", " if k < 0 or self.end <= k: \n", " raise IndexError, k\n", " return k * k\n", " elif type(k) == types.SliceType: # Slicing\n", " start = k.start or 0\n", " if k.stop > self.end: \n", " stop = self.end\n", " else: \n", " stop = k.stop\n", " step = k.step or 1 \n", " return map(self.__getitem__, range(start, stop, step))\n", " \n", "s = Square(10)\n", "print s[4] # \uc778\ub371\uc2f1\n", "print s[1:5] # \uc2ac\ub77c\uc774\uc2f1\n", "print s[1:10:2] # \uac04\uaca9\uc740 2\ub85c\n", "print s[:] # \uc804\uccb4\ubc94\uc704" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "16\n", "[1, 4, 9, 16]\n", "[1, 9, 25, 49, 81]\n", "[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]\n" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6-3 \ub9e4\ud551 \uc790\ub8cc\ud615\uc758 \uc5f0\uc0b0\uc790 \uc911\ubcf5" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class MyDict:\n", " def __init__(self, d = None):\n", " if d == None:\n", " d = {}\n", " self.d = d\n", " def __getitem__(self, k): # key\n", " return self.d[k]\n", " def __setitem__(self, k, v):\n", " self.d[k] = v\n", " def __len__(self):\n", " return len(self.d)\n", " \n", "m = MyDict() #__init__\ud638\ucd9c\n", "m['day'] = 'light' #__setitem__\ud638\ucd9c\n", "m['night'] = 'darkness' #__setitem__\ud638\ucd9c \n", "print m\n", "print m['day'] #__getitem__\ud638\ucd9c\n", "print m['night'] #__getitem__\ud638\ucd9c\n", "print len(m) #__len__\ud638\ucd9c" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "<__main__.MyDict instance at 0x10de1b710>\n", "light\n", "darkness\n", "2\n" ] } ], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "class MyDict:\n", " def __init__(self, d=None):\n", " if d == None: d = {}\n", " self.d = d\n", " def __getitem__(self, k):\n", " return self.d[k]\n", " def __setitem__(self, k, v):\n", " self.d[k] = v\n", " def __len__(self):\n", " return len(self.d)\n", " def keys(self):\n", " return self.d.keys()\n", " def values(self):\n", " return self.d.values()\n", " def items(self):\n", " return self.d.items()\n", " \n", "m = MyDict({'one':1, 'two':2, 'three':3})\n", "print m.keys()\n", "print m.values()\n", "print m.items()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "['three', 'two', 'one']\n", "[3, 2, 1]\n", "[('three', 3), ('two', 2), ('one', 1)]\n" ] } ], "prompt_number": 17 }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "## 07 \ud2b9\ubcc4 \uc18d\uc131\ub4e4\n", "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7-1 \ubb38\uc790\uc5f4\ub85c \ubcc0\ud658\ud558\uae30\n", "1) \\_\\_repr\\_\\_\n", "- \uac1d\uccb4\uc758 \uacf5\uc2dd\uc801\uc778 \ubb38\uc790\uc5f4 \ud45c\ud604\n", "- \uac1d\uccb4\ub97c \ub300\ud45c\ud558\uc5ec \uc720\uc77c\ud558\uac8c \ud45c\ud604\ud560 \uc218 \uc788\ub294 \ubb38\uc790\uc5f4\n", "- eval() \ud568\uc218\uc5d0 \uc758\ud558\uc5ec \uac19\uc740 \uac1d\uccb4\ub85c \ub2e4\uc2dc \uc0dd\uc131\ub420 \uc218 \uc788\ub294 \ubb38\uc790\uc5f4 \ud45c\ud604\n", "\n", "2) \\_\\_str\\_\\_\n", "- \uac1d\uccb4\uc758 \ube44\uacf5\uc2dd\uc801\uc778 \ubb38\uc790\uc5f4 \ud45c\ud604\n", "- \uc0ac\uc6a9\uc790\uac00 \ubcf4\uae30 \ud3b8\ud55c \ud615\ud0dc\ub85c \uc790\uc720\ub86d\uac8c \ud45c\ud604\ub420 \uc218 \uc788\uc74c" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class StringRepr:\n", " def __repr__(self):\n", " return 'repr called'\n", " def __str__(self):\n", " return 'str called'\n", " \n", "s = StringRepr()\n", "print s\n", "print str(s)\n", "print repr(s)\n", "print `s`" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "str called\n", "str called\n", "repr called\n", "repr called\n" ] } ], "prompt_number": 20 }, { "cell_type": "code", "collapsed": false, "input": [ "print repr(1) # \uc22b\uc790 1\uc5d0 \ub300\ud55c repr \ubb38\uc790\uc5f4 \ud45c\ud604\n", "print repr('abc') # \ubb38\uc790\uc5f4 'abc'\uc5d0 \ub300\ud55c repr\ubb38\uc790\uc5f4 \ud45c\ud604\n", "print repr([1,2,3]) # \ub9ac\uc2a4\ud2b8 [1,2,3]\uc5d0 \ub300\ud55c repr \ubb38\uc790\uc5f4 \ud45c\ud604\n", "print\n", "a = eval('1') # <--\uc22b\uc790\n", "b = eval(\"'abc'\") # <--\ubb38\uc790\uc5f4\n", "c = eval('[1,2,3]') # <--\ub9ac\uc2a4\ud2b8\n", "print type(a), type(b), type(c)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1\n", "'abc'\n", "[1, 2, 3]\n", "\n", " \n" ] } ], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \\_\\_str\\_\\_() \ud638\ucd9c\uc2dc \\_\\_str\\_\\_()\uac00 \uc815\uc758\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc73c\uba74 \\_\\_repr\\_\\_()\uc774 \ub300\uc2e0 \ud638\ucd9c\ub428" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class StringRepr:\n", " def __repr__(self):\n", " return 'repr called'\n", " \n", "s = StringRepr()\n", "print s\n", "print repr(s)\n", "print str(s)\n", "print `s`" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "repr called\n", "repr called\n", "repr called\n", "repr called\n" ] } ], "prompt_number": 24 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \\_\\_repr\\_\\_() \ud638\ucd9c\uc2dc \\_\\_repr\\_\\_()\uc774 \uc815\uc758\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc73c\uba74 \uac1d\uccb4 \uc2dd\ubcc4\uc790\uac00 \ucd9c\ub825\ub428\n", " - \ub300\uc2e0\ud558\uc5ec \\_\\_str\\_\\_()\uc774 \ud638\ucd9c\ub418\uc9c0 \uc54a\uc74c" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class StringRepr:\n", " def __str__(self):\n", " return 'str called'\n", "\n", "s = StringRepr()\n", "print s\n", "print repr(s)\n", "print str(s)\n", "print `s`" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "str called\n", "<__main__.StringRepr instance at 0x101d3f908>\n", "str called\n", "<__main__.StringRepr instance at 0x101d3f908>\n" ] } ], "prompt_number": 25 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7-2 \ube44\uad50\ud568\uc218" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uac01\uac01\uc758 \ube44\uad50 \uc5f0\uc0b0\uc5d0 \ub300\uc751\ub418\ub294 \uba54\uc18c\ub4dc \uc774\ub984\uc774 \uc815\ud574\uc838 \uc788\uc9c0\ub9cc \uadf8\ub7ec\ud55c \uba54\uc18c\ub4dc\uac00 \ubcc4\ub3c4\ub85c \uc815\uc758\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc73c\uba74 cmp\uac00 \ud638\ucd9c\ub428\n", "\n", "|\uba54\uc18c\ub4dc |\uc5f0\uc0b0\uc790 | \ube44\uace0 |\n", "|---|---|---|\n", "|\\_\\_cmp\\_\\_(self, other) | self < other \uc778 \uacbd\uc6b0 \uc74c\uc758 \uc815\uc218, self == other \uc778 \uacbd\uc6b0 0, self > other \uc778 \uacbd\uc6b0 \uc591\uc758 \uc815\uc218\ub97c \ub9ac\ud134\ud574\uc57c \ud568| \uc544\ub798 \uba54\uc18c\ub4dc\uac00 \ubd80\uc7ac\ud55c \uc0c1\ud669\uc5d0 \ud638\ucd9c\ub418\ub294 \uba54\uc18c\ub4dc |\n", "|\\_\\_lt\\_\\_(self, other) | self < other | |\n", "|\\_\\_le\\_\\_(self, other) | self <= other | |\n", "|\\_\\_eq\\_\\_(self, other) | self == other | |\n", "|\\_\\_ne\\_\\_(self, other) | self != other | |\n", "|\\_\\_gt\\_\\_(self, other) | self > other | |\n", "|\\_\\_ge\\_\\_(self, other) | self >= other | |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uac1d\uccb4 c\uc5d0 \ub300\ud55c c > 1\uc5f0\uc0b0\uc758 \ud589\ub3d9 \ubc29\uc2dd\n", " - c.\\_\\_gt\\_\\_()\uac00 \uc788\ub2e4\uba74 \ud638\ucd9c \uacb0\uacfc\uc744 \uadf8\ub300\ub85c \ubc18\ud658\n", " - \uc815\uc758\ub41c c.\\_\\_gt\\_\\_()\uac00 \uc5c6\uace0, c.\\_\\_cmp\\_\\_() \ud638\ucd9c \uacb0\uacfc\uac00 \uc591\uc218\uc774\uba74 True \ubc18\ud658, \uc544\ub2c8\uba74 False \ubc18\ud658" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class MyCmp:\n", " def __init__(self, value):\n", " self.value = value\n", " def __cmp__(self, other):\n", " return self.value - other\n", " \n", "c = MyCmp(10) \n", "print c > 1 # c.__cmp__(1)\uc744 \ud638\ucd9c, \ubc18\ud658\uac12\uc774 \uc591\uc218\uc774\uba74 True\n", "print c < 1 # c.__cmp__(1)\uc744 \ud638\ucd9c, \ubc18\ud658\uac12\uc774 \uc74c\uc218\uc774\uba74 True\n", "print c == 1 # c.__cmp__(1)\uc744 \ud638\ucd9c, \ubc18\ud658\uac12\uc774 0\uc774\uba74 True" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "True\n", "False\n", "False\n" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uac1d\uccb4 m\uc5d0 \ub300\ud55c m < 10\uc5f0\uc0b0\uc758 \ud589\ub3d9 \ubc29\uc2dd\n", " - m.\\_\\_lt\\_\\_()\uac00 \uc788\ub2e4\uba74 \ud638\ucd9c \uacb0\uacfc\uc744 \uadf8\ub300\ub85c \ubc18\ud658\n", " - \uc815\uc758\ub41c m.\\_\\_lt\\_\\_()\uac00 \uc5c6\uace0, m.\\_\\_cmp\\_\\_() \ud638\ucd9c \uacb0\uacfc\uac00 \uc74c\uc218\uc774\uba74 True \ubc18\ud658, \uc544\ub2c8\uba74 False \ubc18\ud658" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class MyCmp2:\n", " def __init__(self, value):\n", " self.value = value\n", " def __lt__(self, other):\n", " return self.value < other\n", "\n", "m = MyCmp2(5)\n", "print m < 10 # m.__lt__(10)\uc744 \ud638\ucd9c\n", "print m < 2\n", "print m < 1" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "True\n", "False\n", "False\n" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7-3 \ud574\uc26c \uba54\uc3d8\ub4dc\n", "- \uc0dd\ub7b5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7-4 \uc9c4\ub9ac\uac12 \ud14c\uc2a4\ud2b8\n", "- \ud30c\uc774\uc36c\uc758 \ub0b4\uc7a5 \uac1d\uccb4\ub4e4\uc5d0 \ub300\ud55c False \uc870\uac74\n", " - \uc815\uc218: 0\n", " - \uc2e4\uc218: 0.0\n", " - \ub9ac\uc2a4\ud2b8, \ubb38\uc790\uc5f4, \ud29c\ud50c, \uc0ac\uc804: \uae38\uc774\uac00 0" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print bool(12), bool(0)\n", "print bool(1.4), bool(0.0)\n", "print bool([]), bool(()), bool({})" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "True False\n", "True False\n", "False False False\n" ] } ], "prompt_number": 24 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uc0ac\uc6a9\uc790 \uc815\uc758 \ud074\ub798\uc2a4 \uc778\uc2a4\ud134\uc2a4\uc5d0 \ub300\ud55c \uc9c4\ub9ac\uac12 \ud14c\uc2a4\ud2b8 (bool() \ub0b4\uc7a5 \ud568\uc218\uc5d0 \ub300\ud55c \ubc18\ud658\uac12 \uacb0\uc815 \ub85c\uc9c1)\n", " - \\_\\_nonzero\\_\\_() \uba54\uc18c\ub4dc\uac00 \uc815\uc758\ub418\uc5b4 \uc788\ub2e4\uba74\n", " - \uc774 \uba54\uc18c\ub4dc\uac00 \ubc18\ud658\ud558\ub294 \uacb0\uacfc\uac00 \uc9c4\ub9ac\uac12\uc744 \uacb0\uc815\n", " - \uadf8\ub807\uc9c0 \uc54a\uace0, \\_\\_len\\_\\_() \uba54\uc18c\ub4dc\uac00 \uc815\uc758\ub418\uc5b4 \uc788\ub2e4\uba74\n", " - \uc774 \uba54\uc18c\ub4dc\uac00 \ubc18\ud658\ud558\ub294 \uac12\uc774 0\uc774 \uc544\ub2c8\uba74 True, 0\uc774\uba74 False\n", " - \uc704 \ub450 \uba54\uc18c\ub4dc\uac00 \ubaa8\ub450 \uc815\uc758\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc73c\uba74 \ud56d\uc0c1 True" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Truth:\n", " def __init__(self, num):\n", " self.num = num\n", " def __nonzero__(self):\n", " return self.num == 10 #num\uc774 10\uc77c \uacbd\uc6b0\ub9cc \ucc38(1)\uc744 \ub9ac\ud134\n", " \n", "t = Truth(3) # num\uc5d0 3 \uc124\uc815\n", "print bool(t) \n", "\n", "t.num = 10 # num\uc5d0 10 \uc124\uc815\n", "print bool(t)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "False\n", "True\n" ] } ], "prompt_number": 35 }, { "cell_type": "code", "collapsed": false, "input": [ "class Truth:\n", " def __init__(self, num):\n", " self.num = num\n", " def __len__(self):\n", " return self.num\n", " \n", "t = Truth(3) # num\uc5d0 3 \uc124\uc815\n", "print bool(t) \n", "\n", "t.num = 0 # num\uc5d0 0 \uc124\uc815\n", "print bool(t)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "True\n", "False\n" ] } ], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "class AlwaysTrue:\n", " pass\n", "\n", "t = AlwaysTrue()\n", "print bool(t)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "True\n" ] } ], "prompt_number": 25 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7-5 \ud074\ub798\uc2a4 \uc778\uc2a4\ud134\uc2a4 \uc18d\uc131 \uc81c\uc5b4\ud558\uae30 \n", "- \uc0dd\ub7b5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7-6 \ud638\ucd9c \uac00\ub2a5\ud55c \ud074\ub798\uc2a4 \uc778\uc2a4\ud134\uc2a4 \ub9cc\ub4e4\uae30\n", "- \ud638\ucd9c \uac00\ub2a5 (Callable) \uac1d\uccb4\n", " - \uac1d\uccb4() \uc640 \uac19\uc774 \uad04\ud638 \uc5f0\uc0b0\uc744 \uc774\uc6a9\ud558\uc5ec \ud574\ub2f9 \uac1d\uccb4\ub97c \ud638\ucd9c\ud560 \uc218 \uc788\ub294 \uac1d\uccb4\n", " - \ubaa8\ub4e0 \ud568\uc218, \ubaa8\ub4e0 \ud074\ub798\uc2a4\ub294 \ud638\ucd9c \uac00\ub2a5\n", " - \\_\\_call\\_\\_ \uba54\uc18c\ub4dc\ub97c \uad6c\ud604\ud558\uace0 \uc788\ub294 \ud074\ub798\uc2a4\uc758 \uac1d\uccb4\n", "- \ud074\ub798\uc2a4 \uc778\uc2a4\ud134\uc2a4\uc5d0 \\_\\_call\\_\\_ \uba54\uc18c\ub4dc\uac00 \uad6c\ud604\ub418\uc5b4 \uc788\ub2e4\uba74 \ud574\ub2f9 \uc778\uc2a4\ud134\uc2a4\ub294 \ud568\uc218\uc640 \uac19\uc774 \ud638\ucd9c\ub420 \uc218 \uc788\ub2e4.\n", " - \uc778\uc2a4\ud134\uc2a4 x\uc5d0 \ub300\ud574 x(a1, a2, a3)\uc640 \uac19\uc774 \ud638\ucd9c\ub41c\ub2e4\uba74 x.\\_\\_call(a1, a2, a3)\\_\\_ \uac00 \ud638\ucd9c\ub41c\ub2e4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Accumulator:\n", " def __init__(self):\n", " self.sum = 0\n", " def __call__(self, *args):\n", " self.sum += sum(args)\n", " return self.sum\n", " \n", "acc = Accumulator()\n", "print acc(1,2,3,4,5)\n", "print acc(6)\n", "print acc(7,8,9)\n", "print acc.sum" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "15\n", "21\n", "45\n", "45\n" ] } ], "prompt_number": 48 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7-7 \ud638\ucd9c \uac00\ub2a5\ud55c \uac1d\uccb4\uc778\uc9c0 \uc54c\uc544\ubcf4\uae30" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class A:\n", " def __call__(self, v):\n", " return v\n", "\n", "class B:\n", " def func(self, v):\n", " return v\n", " \n", "a = A()\n", "b = B()\n", "print callable(a)\n", "print callable(b)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "True\n", "False\n" ] } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uae30\ubcf8\uc801\uc73c\ub85c \ubaa8\ub4e0 \ud074\ub798\uc2a4\uc640 \ud568\uc218\ub294 \ud638\ucd9c \uac00\ub2a5 " ] }, { "cell_type": "code", "collapsed": false, "input": [ "import string\n", "\n", "class F:\n", " pass\n", "\n", "def f():\n", " pass\n", "\n", "print callable(string)\n", "print callable(F)\n", "print callable(f)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "False\n", "True\n", "True\n" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7-8 \ud5c8\uc6a9 \uac00\ub2a5\ud55c \uc778\uc2a4\ud134\uc2a4 \ubcc0\uc218 \ubaa9\ub85d \ub9cc\ub4e4\uae30\n", "- \uc0dd\ub7b5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7-9 \uba54\uc3d8\ub4dc\ub85c \uc18d\uc131 \uc815\uc758\ud558\uae30\n", "- \uc0dd\ub7b5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "## 08 \uc0c1\uc18d\n", "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![inheritance](images/inheritance2.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uc0c1\uc18d\uc758 \uc774\uc720\n", " - \ucf54\ub4dc\uc758 \uc7ac\uc0ac\uc6a9\n", " - \uc0c1\uc18d\ubc1b\uc740 \uc790\uc2dd \ud074\ub798\uc2a4\ub294 \uc0c1\uc18d\uc744 \ud574\uc900 \ubd80\ubaa8 \ud074\ub798\uc2a4\uc758 \ubaa8\ub4e0 \uae30\ub2a5\uc744 \uadf8\ub300\ub85c \uc0ac\uc6a9\n", " - \uc790\uc2dd \ud074\ub798\uc2a4\ub294 \ud544\uc694\ud55c \uae30\ub2a5\ub9cc\uc744 \uc815\uc758\ud558\uac70\ub098 \uae30\uc874\uc758 \uae30\ub2a5\uc744 \ubcc0\uacbd\ud560 \uc218 \uc788\uc74c\n", "- \uc774\ub984 \uacf5\uac04\uc758 \ud3ec\ud568\uad00\uacc4\n", " - \uc790\uc2dd \ud074\ub798\uc2a4 > \ubd80\ubaa8 \ud074\ub798\uc2a4" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Person:\n", " def __init__(self, name, phone=None):\n", " self.name = name\n", " self.phone = phone\n", " def display(self):\n", " return '' % (self.name, self.phone)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "class Employee(Person): # \uad04\ud638 \uc548\uc5d0 \uc4f0\uc5ec\uc9c4 \ud074\ub798\uc2a4\ub294 \uc288\ud37c\ud074\ub798\uc2a4\ub97c \uc758\ubbf8\ud55c\ub2e4.\n", " def __init__(self, name, phone, position, salary):\n", " Person.__init__(self, name, phone) # Person\ud074\ub798\uc2a4\uc758 \uc0dd\uc131\uc790 \ud638\ucd9c\n", " self.position = position\n", " self.salary = salary" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "p1 = Person('\ud64d\uae38\ub3d9', 1498)\n", "print p1.name\n", "print p1.display()\n", "\n", "print\n", "\n", "m1 = Employee('\uc190\ucc3d\ud76c', 5564, '\ub300\ub9ac', 200)\n", "m2 = Employee('\uae40\uae30\ub3d9', 8546, '\uacfc\uc7a5', 300)\n", "print m1.name, m1.position # \uc288\ud37c\ud074\ub798\uc2a4\uc640 \uc11c\ube0c\ud074\ub798\uc2a4\uc758 \uba64\ubc84\ub97c \ud558\ub098\uc529 \ucd9c\ub825\ud55c\ub2e4.\n", "print m1.display()\n", "print m2.name, m2.position\n", "print m2.display()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\ud64d\uae38\ub3d9\n", "\n", "\n", "\uc190\ucc3d\ud76c \ub300\ub9ac\n", "\n", "\uae40\uae30\ub3d9 \uacfc\uc7a5\n", "\n" ] } ], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 8-1 \uc774\ub984 \uacf5\uac04\uc758 \uad00\uacc4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![inheritance](images/inheritance3.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 8-2 \uc0dd\uc131\uc790 \ud638\ucd9c\n", "- \uc11c\ube0c \ud074\ub798\uc2a4\uc758 \uc0dd\uc131\uc790\ub294 \uc288\ud37c \ud074\ub798\uc2a4\uc758 \uc0dd\uc131\uc790\ub97c \uc790\ub3d9\uc73c\ub85c \ud638\ucd9c\ud558\uc9c0 \uc54a\ub294\ub2e4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Super:\n", " def __init__(self):\n", " print 'Super init called'\n", "\n", "class Sub(Super):\n", " def __init__(self):\n", " print 'Sub init called'\n", " \n", "s = Sub()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Sub init called\n" ] } ], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uc11c\ube0c \ud074\ub798\uc2a4\uc758 \uc0dd\uc131\uc790\uc5d0\uc11c \uc288\ud37c \ud074\ub798\uc2a4\uc758 \uc0dd\uc131\uc790\ub97c \uba85\uc2dc\uc801\uc73c\ub85c \ud638\ucd9c\ud574\uc57c \ud55c\ub2e4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Super:\n", " def __init__(self):\n", " print 'Super init called'\n", " \n", "class Sub(Super):\n", " def __init__(self):\n", " Super.__init__(self) # \uba85\uc2dc\uc801\uc73c\ub85c \uc288\ud37c\ud074\ub798\uc2a4\uc758 \uc0dd\uc131\uc790\ub97c \ud638\ucd9c\ud55c\ub2e4.\n", " print 'Sub init called'\n", " \n", "s = Sub()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Super init called\n", "Sub init called\n" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uc11c\ube0c \ud074\ub798\uc2a4\uc5d0 \uc0dd\uc131\uc790\uac00 \uc815\uc758\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc740 \uacbd\uc6b0\uc5d0\ub294 \uc288\ud37c \ud074\ub798\uc2a4\uc758 \uc0dd\uc131\uc790\uac00 \ud638\ucd9c\ub41c\ub2e4. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Super:\n", " def __init__(self):\n", " print 'Super init called'\n", " \n", "class Sub(Super):\n", " pass\n", "\n", "s = Sub()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Super init called\n" ] } ], "prompt_number": 66 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 8-3 \uba54\uc3d8\ub4dc\uc758 \ub300\uce58 (\uba54\uc18c\ub4dc \uc624\ubc84\ub77c\uc774\ub4dc - Override)\n", "- \uc11c\ube0c \ud074\ub798\uc2a4\uc5d0\uc11c \uc288\ud37c \ud074\ub798\uc2a4\uc5d0 \uc815\uc758\ub41c \uba54\uc18c\ub4dc\ub97c \uc7ac\uc815\uc758\ud558\uc5ec \ub300\uce58\ud558\ub294 \uae30\ub2a5" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Person:\n", " def __init__(self, name, phone=None):\n", " self.name = name\n", " self.phone = phone\n", " def __repr__(self):\n", " return '' % (self.name, self.phone)\n", " \n", "class Employee(Person):\n", " def __init__(self, name, phone, position, salary):\n", " Person.__init__(self, name, phone)\n", " self.position = position\n", " self.salary = salary\n", " \n", "p1 = Person('gslee', 5284)\n", "m1 = Employee('kslee', 5224, 'President', 500)\n", "\n", "print p1\n", "print m1" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", "\n" ] } ], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "class Employee(Person):\n", " def __init__(self, name, phone, position, salary):\n", " Person.__init__(self, name, phone)\n", " self.position = position\n", " self.salary = salary\n", " def __repr__(self):\n", " return '' % (self.name, self.phone, self.position, self.salary)\n", " \n", "p1 = Person('gslee', 5284)\n", "m1 = Employee('kslee', 5224, 'President', 500)\n", "\n", "print p1\n", "print m1" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", "\n" ] } ], "prompt_number": 75 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 8-4 \uba54\uc3d8\ub4dc\uc758 \ud655\uc7a5\n", "- \uc288\ud3b4 \ud074\ub798\uc2a4\uc758 \uba54\uc18c\ub4dc\ub97c \uc644\uc804\ud788 \ubb34\uc2dc\ud558\ub294 \uac83\uc774 \uc544\ub2c8\ub77c \uc11c\ube0c \ud074\ub798\uc2a4\uc5d0\uc11c Override \ud560 \ub54c \ud65c\uc6a9\ud560 \uc218\ub3c4 \uc788\uc74c\n", " - \uc544\ub798 \uc608\uc81c\uc5d0\uc11c \\_\\_repr\\_\\_() \uba54\uc18c\ub4dc" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Person:\n", " def __init__(self, name, phone=None):\n", " self.name = name\n", " self.phone = phone\n", " def __repr__(self):\n", " return '' % (self.name, self.phone)\n", " \n", "class Employee(Person):\n", " def __init__(self, name, phone, position, salary):\n", " Person.__init__(self, name, phone)\n", " self.position = position\n", " self.salary = salary\n", " def __repr__(self):\n", " s = Person.__repr__(self)\n", " return s + ' ' % (self.position, self.salary)\n", " \n", "p1 = Person('gslee', 5284)\n", "m1 = Employee('kslee', 5224, 'President', 500)\n", "\n", "print p1\n", "print m1" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", " \n" ] } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 8-5 \u2018is-a' \uad00\uacc4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- is-a \uad00\uacc4\uc758 \uc608\n", " - \uc0ac\ub78c is a \uc0dd\uba85\uccb4\n", " - \uadfc\ub85c\uc790 is a \uc0ac\ub78c\n", " - \ud3ec\uc720\ub958 is a \ub3d9\ubb3c\n", " - \ud30c\ucda9\ub958 is a \ub3d9\ubb3c\n", " - \uc5b4\ub958 is a \ub3d9\ubb3c\n", "\n", "- A is a B\n", " - A\ub294 \uc11c\ube0c \ud074\ub798\uc2a4\n", " - B\ub294 \uc288\ud37c \ud074\ub798\uc2a4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 8-6 \uc0c1\uc18d \ud074\ub798\uc2a4\uc758 \uc608\n", "- Sylinder --> Circle --> Point" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# mymath.py\n", "import math\n", "\n", "class Point:\n", " def __init__(self, x, y):\n", " self.x = x\n", " self.y = y\n", " def area(self): # \uc810\uc758 \uba74\uc801\uc740 0\n", " return 0\n", " def move(self, dx, dy):\n", " self.x += dx\n", " self.y += dy\n", " def __repr__(self):\n", " return 'x=%s y=%s' %(self.x, self.y)\n", " \n", "class Circle(Point):\n", " def __init__(self, x, y, r):\n", " Point.__init__(self, x, y)\n", " self.radius = r\n", " def area(self): # \uc6d0\uc758 \uba74\uc801\n", " return math.pi * self.radius * self.radius\n", " def __repr__(self):\n", " return '%s radius=%s' % (Point.__repr__(self), self.radius)\n", " \n", "class Cylinder(Circle):\n", " def __init__(self, x, y, r, h):\n", " Circle.__init__(self, x, y, r)\n", " self.height = h \n", " def area(self): # \uc704 \uc544\ub798\uc758 \uc6d0\uc758 \uba74\uc801 + \uae30\ub465\uc758 \ud45c\uba74\uc801\n", " return 2 * Circle.area(self) + 2 * math.pi * self.radius * self.height\n", " def volume(self): # \uccb4\uc801\n", " return Circle.area(self) * self.height\n", " def __repr__(self):\n", " return '%s height=%s' %(Circle.__repr__(self), self.height)\n", " \n", "if __name__ == '__main__':\n", " p1 = Point(3, 5)\n", " c1 = Circle(3, 4, 5)\n", " c2 = Cylinder(3, 4, 5, 6)\n", " \n", " print p1\n", " print\n", "\n", " print c1\n", " print c1.area()\n", " print\n", " \n", " print c2\n", " print c2.area(), c2.volume()\n", " print\n", " \n", " p1.move(10, 10)\n", " print p1" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "x=3 y=5\n", "\n", "x=3 y=4 radius=5\n", "78.5398163397\n", "\n", "x=3 y=4 radius=5 height=6\n", "345.575191895 471.238898038\n", "\n", "x=13 y=15\n" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 8-7 \ub2e4\uc911 \uc0c1\uc18d(multiple inheritance) \n", "- \uc0dd\ub7b5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 8-8 \uba54\uc3d8\ub4dc \ucc98\ub9ac \uc21c\uc11c (method resolution order)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uc0dd\ub7b5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 8-9 \ud30c\uc774\uc36c\uacfc \uac00\uc0c1 \ud568\uc218 (virtual function)\n", "- \uac00\uc0c1 \ud568\uc218\n", " - \ud568\uc218\uc758 \ud638\ucd9c \uc790\uccb4\uac00 \ucc38\uc870\ub418\ub294 \uc778\uc2a4\ud134\uc2a4\uc5d0 \ub530\ub77c\uc11c \ub3d9\uc801\uc73c\ub85c \uacb0\uc815 (Dynamic Binding)\ub418\ub294 \ud568\uc218\n", " - \ud30c\uc774\uc36c \ud074\ub798\uc2a4\uc758 \ubaa8\ub4e0 \uba54\uc18c\ub4dc\ub294 \uac00\uc0c1 \ud568\uc218\uc774\ub2e4.\n", " \n", "- \uc544\ub798 \uc608\uc81c \uc124\uba85\n", " - Base \ud074\ub798\uc2a4\uc758 \uc778\uc2a4\ud134\uc2a4 b\ub97c \ud1b5\ud558\uc5ec f()\ub97c \ud638\ucd9c\ud558\uba74 Base \ud074\ub798\uc2a4\uc758 g()\uac00 \ud638\ucd9c\n", " - Derived \ud074\ub798\uc2a4\uc758 \uc778\uc2a4\ud134\uc2a4 a\ub97c \ud1b5\ud558\uc5ec f()\ub97c \ud638\ucd9c\ud558\uba74 Derived \ud074\ub798\uc2a4\uc758 g()\uac00 \ud638\ucd9c " ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Base:\n", " def f(self):\n", " self.g() # \ud568\uc218 g() \ud638\ucd9c\n", " def g(self):\n", " print 'Base'\n", " \n", "class Derived(Base):\n", " def g(self): # \ud30c\uc0dd\ud074\ub798\uc2a4\uc758 \ud568\uc218 g()\n", " print 'Derived'\n", " \n", "b = Base()\n", "b.f()\n", "\n", "a = Derived()\n", "a.f()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Base\n", "Derived\n" ] } ], "prompt_number": 49 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 8-10 \uc2e4\uc81c\uc801\uc778 \ud074\ub798\uc2a4 \uc0c1\uc18d\uc758 \uc608\n", "- \uc6b0\uc120 11\uc808 \ub0b4\uc6a9\uc744 \uba3c\uc800 \ud559\uc2b5\ud560 \uac83\n", "- \uc880 \ub354 \uc2e4\uc81c\uc801\uc778 \uc608\ub97c \ud1b5\ud558\uc5ec \uc885\ud569\uc801\uc778 \ub0b4\uc6a9\uc744 \uc0b4\ud3b4\ubd04\n", "- Stack \ud074\ub798\uc2a4\uc758 \uc815\uc758\n", " - \uc288\ud37c \ud074\ub798\uc2a4\ub85c list \ud074\ub798\uc2a4\ub97c \uc9c0\ub2cc\ub2e4.\n", " - \uc989, list \ud074\ub798\uc2a4\ub97c \ud655\uc7a5\ud558\uc5ec Stack \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud568" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Stack(list): # \ud074\ub798\uc2a4 \uc815\uc758\n", " def push(self, other):\n", " self.append(other)\n", " \n", "s = Stack() # \uc778\uc2a4\ud134\uc2a4 \uc0dd\uc131\n", "\n", "s.push(4)\n", "s.push(5)\n", "print s\n", "print\n", "\n", "s = Stack([1,2,3])\n", "s.push(4)\n", "s.push(5)\n", "print s\n", "print\n", "\n", "print s.pop() # \uc288\ud37c \ud074\ub798\uc2a4\uc778 \ub9ac\uc2a4\ud2b8 \ud074\ub798\uc2a4\uc758 pop() \uba54\uc18c\ub4dc \ud638\ucd9c\n", "print s.pop()\n", "print s" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[4, 5]\n", "\n", "[1, 2, 3, 4, 5]\n", "\n", "5\n", "4\n", "[1, 2, 3]\n" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Queue \ud074\ub798\uc2a4 \uc815\uc758\n", " - \uc288\ud37c \ud074\ub798\uc2a4\ub85c \uc5ed\uc2dc list\ub97c \uc9c0\ub2cc\ub2e4.\n", " - \uc989, list \ud074\ub798\uc2a4\ub97c \ud655\uc7a5\ud558\uc5ec Queue \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud568 " ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Queue(list):\n", " def enqueue(self, other):\n", " self.append(other)\n", " def dequeue(self):\n", " return self.pop(0)\n", " \n", "q = Queue()\n", "q.enqueue(1) # \ub370\uc774\ud130 \ucd94\uac00\n", "q.enqueue(2)\n", "print q\n", "\n", "print q.dequeue() # \ub370\uc774\ud130 \uaebc\ub0b4\uae30\n", "print q.dequeue()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[1, 2]\n", "1\n", "2\n" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "## 09 \uc0c1\uc18d \uad00\uacc4\uc5d0 \uc788\ub294 \ud074\ub798\uc2a4\ub4e4\uc758 \uc815\ubcf4 \uc54c\uc544\ub0b4\uae30\n", "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 9-1 isinstance(), \uac1d\uccb4\uac00 \uc5b4\ub5a4 \ud074\ub798\uc2a4\uc5d0 \uc18d\ud574 \uc788\ub294\uc9c0 \ud655\uc778\ud558\uae30" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uac1d\uccb4\uc758 \uc790\ub8cc\ud615 \ube44\uad50 \ubc29\ubc95 I (\uc804\ud1b5\uc801 \ubc29\ubc95)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import types\n", "\n", "print type(123) == types.IntType\n", "print type(123) == type(0)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "True\n", "True\n" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uac1d\uccb4\uc758 \uc790\ub8cc\ud615 \ube44\uad50 \ubc29\ubc95 II (\uc0c8\ub85c\uc6b4 \ubc29\ubc95)\n", " - isinstance() \ub0b4\uc7a5 \ud568\uc218\uc640 \uae30\ubcf8 \uac1d\uccb4 \ud074\ub798\uc2a4 \uc0ac\uc6a9" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print isinstance(123, int)\n", "print int" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " True\n", "\n" ] } ], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uc11c\ube0c \ud074\ub798\uc2a4\uc758 \uc778\uc2a4\ud134\uc2a4\ub294 \uc288\ud37c \ud074\ub798\uc2a4\uc758 \uc778\uc2a4\ud134\uc2a4\uc774\uae30\ub3c4 \ud558\ub2e4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "class A:\n", " pass\n", "\n", "class B:\n", " def f(self):\n", " pass\n", " \n", "class C(B):\n", " pass\n", "\n", "def check(obj):\n", " print obj, '=>',\n", " if isinstance(obj, A):\n", " print 'A',\n", " if isinstance(obj, B):\n", " print 'B',\n", " if isinstance(obj, C):\n", " print 'C',\n", " print\n", " \n", "a = A()\n", "b = B()\n", "c = C()\n", "\n", "check(a)\n", "check(b)\n", "check(c)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "<__main__.A instance at 0x10de34e60> => A\n", "<__main__.B instance at 0x10de34e18> => B\n", "<__main__.C instance at 0x10de34cf8> => B C\n" ] } ], "prompt_number": 18 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 9-2 issubclass(), \ud074\ub798\uc2a4 \uac04\uc758 \uc0c1\uc18d \uad00\uacc4 \uc54c\uc544\ub0b4\uae30" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class A:\n", " pass\n", "\n", "class B:\n", " def f(self):\n", " pass\n", " \n", "class C(B):\n", " pass\n", "\n", "def check(obj):\n", " print obj, '=>',\n", " if issubclass(obj, A):\n", " print 'A',\n", " if issubclass(obj, B):\n", " print 'B',\n", " if issubclass(obj, C):\n", " print 'C',\n", " print\n", " \n", "check(A)\n", "check(B)\n", "check(C)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "__main__.A => A\n", "__main__.B => B\n", "__main__.C => B C\n" ] } ], "prompt_number": 20 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 9-3 _bases_, \uc218\ud37c \ud074\ub798\uc2a4 \ubaa9\ub85d \uc5bb\uae30 \n", "- \uc0dd\ub7b5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 9-4 _class_, \uc778\uc2a4\ud134\uc2a4 \uac1d\uccb4\uc758 \ud074\ub798\uc2a4 \uc54c\uc544\ub0b4\uae30" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Simple:\n", " member = 1\n", " def method(self):\n", " self.method2 = 'HERE'\n", " \n", "s = Simple()\n", "print s.__class__ # \ud074\ub798\uc2a4 \uac1d\uccb4 \uc5bb\uc5b4\ub0b4\uae30\n", "print s.__class__.__name__ # \ud074\ub798\uc2a4 \uc774\ub984 \uc54c\uc544\ub0b4\uae30" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "__main__.Simple\n", "Simple\n" ] } ], "prompt_number": 21 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 9-5 \\_\\_dict\\_\\_, \ud074\ub798\uc2a4 \uac1d\uccb4\uc640 \uc778\uc2a4\ud134\uc2a4 \uac1d\uccb4\uc758 \uc774\ub984 \uacf5\uac04 \uc54c\uc544\ub0b4\uae30\n", "- \ud074\ub798\uc2a4 \uac1d\uccb4\uc640 \uc778\uc2a4\ud134\uc2a4 \uac1d\uccb4 \uac04\uc5d0 \uc774\ub984\uacf5\uac04\uc740 \ubd84\ub9ac\ub418\uc5b4 \uc788\uc74c" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Simple:\n", " memeber = 1\n", " def f(self):\n", " self.value = 'HERE'\n", " \n", "print Simple.__dict__ # \ud074\ub798\uc2a4 \uc774\ub984\uacf5\uac04 \ud655\uc778\n", "print Simple.__dict__.keys() # \ud074\ub798\uc2a4 \uc774\ub984\uacf5\uac04\uc758 \uc774\ub984\ub9cc \ud655\uc778" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "{'memeber': 1, '__module__': '__main__', '__doc__': None, 'f': }\n", "['memeber', '__module__', '__doc__', 'f']\n" ] } ], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "s = Simple()\n", "print s.__dict__ # \ucc98\uc74c\uc5d0\ub294 \uc778\uc2a4\ud134\uc2a4 \uc774\ub984 \uacf5\uac04\uc5d0 \uc544\ubb34\uac83\ub3c4 \uc815\uc758\ub418\uc5b4 \uc788\uc9c0 \uc54a\ub2e4.\n", "\n", "s.f() # \uc778\uc2a4\ud134\uc2a4 \uba54\uc18c\ub4dc f()\ub97c \ud638\ucd9c\ud558\uc5ec \uc778\uc2a4\ud134\uc2a4 \uac1d\uccb4\uc5d0 value\ub97c \uc815\uc758\ud55c\ub2e4.\n", "print s.__dict__\n", "\n", "s.attr = 'attribute' # \uc0c8\ub85c\uc6b4 \ub2e4\ub978 \uba64\ubc84\ub4e4\uc744 \uc678\ubd80\uc5d0\uc11c \uc815\uc758\n", "s.num1 = 10\n", "print s.__dict__" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "{}\n", "{'value': 'HERE'}\n", "{'attr': 'attribute', 'value': 'HERE', 'num1': 10}\n" ] } ], "prompt_number": 15 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 9-6 dir(), \uac1d\uccb4\uac00 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uc18d\uc131 \uc54c\uc544\ubcf4\uae30\n", "- dir(object)\ub294 object\uac00 \uc288\ud37c \ud074\ub798\uc2a4 \uac1d\uccb4\ub85c \ubd80\ud130 \uc0c1\uc18d \ubc1b\uc740 \uc18d\uc131 \uc774\ub984\uae4c\uc9c0\ub3c4 \ubaa8\ub450 \ubc18\ud658\ud55c\ub2e4.\n", "- dir(object) \ub0b4\uc7a5 \ud568\uc218\uc758 \uacb0\uacfc\ub294 object.\\_\\_dict\\_\\_.keys()\uc758 \uacb0\uacfc\uc640 \uc720\uc0ac\ud568" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print dir(s)\n", "print s.__dict__.keys()\n", "print\n", "\n", "print dir(Simple)\n", "print Simple.__dict__.keys()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "['__doc__', '__module__', 'attr', 'f', 'memeber', 'num1', 'value']\n", "['attr', 'value', 'num1']\n", "\n", "['__doc__', '__module__', 'f', 'memeber']\n", "['memeber', '__module__', '__doc__', 'f']\n" ] } ], "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ "class A(object):\n", " def a(self):\n", " pass\n", " \n", "class B(A):\n", " def b(self):\n", " pass\n", " \n", "class C(B):\n", " def c(self):\n", " pass\n", " \n", "c = C()\n", "print dir(c) # \uc778\uc2a4\ud134\uc2a4 \uac1d\uccb4\uc758 \uc18d\uc131\uc5d0 \ud074\ub798\uc2a4 \uac1d\uccb4\uc758 \uc18d\uc131\uae4c\uc9c0\ub3c4 \ud3ec\ud568\ud574\uc11c \ud45c\uc2dc\n", "print \"-\" * 10\n", "print\n", "\n", "print dir(C) # \uc288\ud37c\ud074\ub798\uc2a4\uc758 \uc18d\uc131\ub3c4 \ud568\uaed8 \ud45c\uc2dc\n", "print \"-\" * 10\n", "print\n", "\n", "print dir(B) \n", "print \"-\" * 10\n", "print\n", "\n", "print dir(A)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'a', 'b', 'c']\n", "----------\n", "\n", "['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'a', 'b', 'c']\n", "----------\n", "\n", "['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'a', 'b']\n", "----------\n", "\n", "['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'a']\n" ] } ], "prompt_number": 20 }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "## 10 \ud611\ub3d9\uc801 \uba54\uc3d8\ub4dc\uc640 super()\n", "***\n", "- \uc0dd\ub7b5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "## 11 \ub0b4\uc7a5 \uc790\ub8cc\ud615\uacfc \ud074\ub798\uc2a4\uc758 \ud1b5\uc77c\n", "***\n", "- \uc0ac\uc6a9\uc790 \uc790\ub8cc\ud615(\ud074\ub798\uc2a4)\ub97c \uc815\uc758\ud560 \ub54c object\uc744 \uc288\ud37c \ud074\ub798\uc2a4\ub85c \ud65c\uc6a9\n", " - \ub0b4\uc7a5 \uc790\ub8cc\ud615\uacfc \uc0ac\uc6a9\uc790 \uc790\ub8cc\ud615\uc758 \ucc28\uc774\ub97c \uc5c6\uc5d0\uace0 \ud1b5\uc77c\ub41c \uad00\uc810\uc73c\ub85c \ubaa8\ub4e0 \uac1d\uccb4\ub97c \ub2e4\ub8f0 \uc218 \uc788\ub294 \ubc29\uc548\n", " - \uc774\ub97c \ud65c\uc6a9\ud558\uc5ec \ub0b4\uc7a5 \uc790\ub8cc\ud615(list, dict, tuple, string)\uc744 \uc0c1\uc18d\ud558\uc5ec \uc0ac\uc6a9\uc790 \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud558\ub294 \uac83\ub3c4 \uac00\ub2a5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 11-1 \uc790\ub8cc\ud615 \uc774\ub984\uacfc \uc0dd\uc131\uc790\uc758 \uc77c\uce58\n", "- \ud074\ub798\uc2a4 \uc815\uc758\ub294 \uc0c8\ub85c\uc6b4 \uc790\ub8cc\ud615\uc758 \uc815\uc758\uc784" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- object \uac1d\uccb4\n", " - \ud30c\uc774\uc36c\uc758 \ucd5c\uc0c1\uc704 base \uac1d\uccb4\ub85c \ud65c\uc6a9 \uac00\ub2a5\n", " - object\ub97c \uc0c1\uc18d\ud558\ub294 \uac83\uc73c\ub85c\uc758 \ud65c\uc6a9 \uac00\uce58\ub294 \uadf8\ub2e4\uc9c0 \uc5c6\uc74c. \uadf8\ub7ec\ub098..." ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Simple():\n", " pass\n", "\n", "s = Simple() \n", "print Simple\n", "print type(s) # s\uc758 \uc790\ub8cc\ud615\uc740?\n", "print s.__class__ # s\uc758 \ud074\ub798\uc2a4\ub294?\n", "print \n", "\n", "print s.__class__ == type(s) #s\uc758 \uc790\ub8cc\ud615\uacfc s\uc758 \ud074\ub798\uc2a4\ub294 \uac19\uc740\ud589\uc778\uac00?\n", "print\n", "\n", "print s" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "__main__.Simple\n", "\n", "__main__.Simple\n", "\n", "False\n", "\n", "<__main__.Simple instance at 0x10d8b8440>\n" ] } ], "prompt_number": 27 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uc784\uc758\uc758 \ud074\ub798\uc2a4 \uc120\uc5b8\uc2dc\uc5d0 object\ub97c \ubca0\uc774\uc2a4 \ud074\ub798\uc2a4\ub85c \uc120\uc5b8\ud558\ub294 \uac83 \uad8c\uc7a5 " ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Simple(object):\n", " pass\n", "\n", "s = Simple() \n", "print Simple\n", "print type(s) # s\uc758 \uc790\ub8cc\ud615\uc740?\n", "print s.__class__ # s\uc758 \ud074\ub798\uc2a4\ub294?\n", "print \n", "\n", "print s.__class__ == type(s) #s\uc758 \uc790\ub8cc\ud615\uacfc s\uc758 \ud074\ub798\uc2a4\ub294 \uac19\uc740\ud589\uc778\uac00?\n", "print\n", "\n", "print s" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", "\n", "\n", "\n", "True\n", "\n", "<__main__.Simple object at 0x10dee4690>\n" ] } ], "prompt_number": 28 }, { "cell_type": "code", "collapsed": false, "input": [ "print dir(object)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']\n" ] } ], "prompt_number": 26 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 11-2 \ud074\ub798\uc2a4 \ud615\uacfc \uc790\ub8cc\ud615\uc758 \uc77c\uce58\n", "- \ub0b4\uc7a5 \uc790\ub8cc\ud615(list, dict, tuple, string)\uc744 \uc0c1\uc18d\ud558\uc5ec \uc0ac\uc6a9\uc790 \ud074\ub798\uc2a4\ub97c \uc815\uc758" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1) \ub9ac\uc2a4\ud2b8 \uc11c\ube0c \ud074\ub798\uc2a4 \ub9cc\ub4e4\uae30\n", "- \uc544\ub798 \uc608\uc81c\ub294 \ub0b4\uc7a5 \uc790\ub8cc\ud615\uc778 list\ub97c \uc0c1\uc18d\ud558\uc5ec \ube84\uc148 \uc5f0\uc0b0(-)\uc744 \ucd94\uac00\ud568" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class MyList(list):\n", " def __sub__(self, other): # '-' \uc5f0\uc0b0\uc790 \uc911\ubcf5 \ud568\uc218 \uc815\uc758\n", " for x in other:\n", " if x in self:\n", " self.remove(x) # \uac01 \ud56d\ubaa9\uc744 \ud558\ub098\uc529 \uc0ad\uc81c\ud55c\ub2e4.\n", " return self\n", "\n", "L = MyList([1, 2, 3, 'spam', 4, 5])\n", "print L\n", "print\n", "\n", "L = L - ['spam', 4]\n", "print L" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[1, 2, 3, 'spam', 4, 5]\n", "\n", "[1, 2, 3, 5]\n" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "2) \uc0ac\uc804 \uc11c\ube0c \ud074\ub798\uc2a4 \ub9cc\ub4e4\uae30\n", "- keys() \uba54\uc18c\ub4dc\ub97c \uc815\ub82c\ub41c \ud0a4\uac12 \ub9ac\uc2a4\ud2b8\ub97c \ubc18\ud658\ud558\ub3c4\ub85d \uc7ac\uc815\uc758\ud55c\ub2e4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "class MyDict(dict):\n", " def keys(self):\n", " K = dict.keys(self) # \uc5b8\ubc14\uc6b4\ub4dc \uba54\uc18c\ub4dc \ud638\ucd9c --> K = self.keys() \ub77c\uace0 \ud638\ucd9c\ud558\uba74 \ubb34\ud55c \uc7ac\uadc0 \ud638\ucd9c\n", " K.sort()\n", " return K\n", "\n", "d = MyDict({'one':1, 'two':2, 'three':3})\n", "print d.keys()\n", "print\n", "\n", "d2 = {'one':1, 'two':2, 'three':3}\n", "print d2.keys()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "['one', 'three', 'two']\n", "\n", "['three', 'two', 'one']\n" ] } ], "prompt_number": 56 }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "## 12 \ub2e4\ud615\uc131\n", "***\n", "- \ub2e4\ud615\uc131(Polymorphism)\n", " - \uc0c1\uc18d \uad00\uacc4 \ub0b4\uc758 \ub2e4\ub978 \ud074\ub798\uc2a4\ub4e4\uc758 \uc778\uc2a4\ud134\uc2a4\ub4e4\uc774 \uac19\uc740 \uba64\ubc84 \ud568\uc218 \ud638\ucd9c\uc5d0 \ub300\ud574 \uac01\uac01 \ub2e4\ub974\uac8c \ubc18\uc751\ud558\ub3c4\ub85d \ud558\ub294 \uae30\ub2a5\n", " - \uc5f0\uc0b0\uc790 \uc624\ubc84\ub85c\ub529\ub3c4 \ub2e4\ud615\uc131\uc744 \uc9c0\uc6d0\ud558\ub294 \uc911\uc694\ud55c \uae30\uc220 \n", " - \uc608\ub97c \ub4e4\uc5b4, a\uc640 b\uc758 \uac1d\uccb4 \ud615\uc5d0 \ub530\ub77c a + b\uc758 + \uc5f0\uc0b0\uc790 \ud589\ub3d9 \ubc29\uc2dd\uc774 \ubcc0\uacbd\ub418\ub294 \uac83\ub3c4 \ub2e4\ud615\uc131\uc774\ub77c\uace0 \ubd80\ub97c \uc218 \uc788\ub2e4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Animal:\n", " def cry(self):\n", " print '...'\n", " \n", "class Dog(Animal):\n", " def cry(self):\n", " print '\uba4d\uba4d'\n", " \n", "class Duck(Animal):\n", " def cry(self):\n", " print '\uaf65\uaf65'\n", " \n", "class Fish(Animal):\n", " pass\n", "\n", "for each in (Dog(), Duck(), Fish()):\n", " each.cry()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\uba4d\uba4d\n", "\uaf65\uaf65\n", "...\n" ] } ], "prompt_number": 57 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \ub2e4\ud615\uc131\uc758 \uc7a5\uc810\n", " - \ud558\ub098\uc758 \uc774\ub984 (\uc801\uc740 \ucf54\ub529)\uc73c\ub85c \ub2e4\uc591\ud55c \uac1d\uccb4\ub4e4\uc5d0\uac8c \uc720\uc0ac\ud55c \uc791\uc5c5\uc744 \uc218\ud589\uc2dc\ud0ac \uc218 \uc788\uc74c\n", " - \ud504\ub85c\uadf8\ub7a8 \uc791\uc131 \ucf54\ub4dc \ub7c9\uc774 \uc904\uc5b4\ub4e0\ub2e4.\n", " - \ucf54\ub4dc\uc758 \uac00\ub3c5\uc131\uc744 \ub192\ud600\uc900\ub2e4.\n", " \n", "- \ud30c\uc774\uc36c\uc5d0\uc11c \ub2e4\ud615\uc131\uc758 \uc7a5\uc810\n", " - \ud615 \uc120\uc5b8\uc774 \uc5c6\ub2e4\ub294 \uc810\uc5d0\uc11c \ud30c\uc774\uc36c\uc5d0\uc11c\ub294 \ub2e4\ud615\uc131\uc758 \uc7a5\uc810\uc774 \ub354\uc6b1 \ubd80\uac01\ub41c\ub2e4.\n", " - \uc2e4\uc2dc\uac04\uc73c\ub85c \uac1d\uccb4\uc758 \ud615\uc774 \uacb0\uc815\ub418\ubbc0\ub85c \ub2e8 \ud558\ub098\uc758 \uba54\uc18c\ub4dc\uc5d0 \uc758\ud574 \ucc98\ub9ac\ub420 \uc218 \uc788\ub294 \uac1d\uccb4\uc758 \uc218\ub294 \ub354\uc6b1 \ub9ce\uc544\uc9c4\ub2e4.\n", " - \uc989, \ub2e4\ub978 \uc5b8\uc5b4\ubcf4\ub2e4 \ucf54\ub4dc\uc758 \uc591\uc774 \ub354\uc6b1 \uc904\uc5b4\ub4e0\ub2e4.\n", " - \ud30c\uc774\uc36c\uc5d0\uc11c \ubaa8\ub4e0 \ud568\uc218\ub294 \uae30\ubcf8\uc801\uc73c\ub85c \ub2e4\ud615\uc131\uc758 \ud2b9\uc9d5\uc744 \ud3ec\ud568\ud55c\ub2e4." ] }, { "cell_type": "code", "collapsed": false, "input": [ "class IntegerAdder:\n", " def __init__(self, value = 0):\n", " self.value = value\n", " def __add__(self, value):\n", " try:\n", " return IntegerAdder(self.value + int(value))\n", " except:\n", " return self\n", " def __repr__(self):\n", " return `self.value`\n", " \n", "a = IntegerAdder(5)\n", "print a + 4 # \uc815\uc218\ub367\uc148\n", "print a + 4.5 # \uc2e4\uc218\ub367\uc148\n", "print a + '1234' # \uc815\uc218\ub85c \ubcc0\ud658 \uac00\ub2a5\ud55c \ubb38\uc790\uc5f4 \ub367\uc148\n", "print a + 'abc' # \uc815\uc218\ub85c \ubcc0\ud658 \uac00\ub2a5\ud558\uc9c0 \uc54a\uc740 \ubb38\uc790\uc5f4 \ub367\uc148" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "9\n", "9\n", "1239\n", "5\n" ] } ], "prompt_number": 58 }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "## 13 \uc0c1\uc18d\uacfc \ud569\uc131\n", "***\n", "- \ucf54\ub4dc\ub97c \uc7ac\uc0ac\uc6a9\ud558\ub294 \ub450 \uac00\uc9c0 \ubc29\ubc95\n", " - \uc0c1\uc18d(Inheritance): IS-A \uad00\uacc4\n", " - \uae30\uc874\uc758 \uad6c\uc131 \uc694\uc18c\uac00 \uc9c0\ub2cc \ubaa8\ub4e0 \uc18d\uc131 \ubc0f \ud589\ub3d9 \ud2b9\uc131\uc744 \uc9c0\ub2c8\uba74\uc11c \ucd94\uac00\uc801\uc778 \uc18d\uc131 \ubc0f \ud589\ub3d9 \ud2b9\uc131\uc744 \uc9c0\ub2c8\ub294 \uad6c\uc131 \uc694\uc18c\ub97c \ub9cc\ub4e4 \ub54c \uc720\uc6a9\n", " - \ud569\uc131(Composition): HAS-A \uad00\uacc4\n", " - \uc784\uc758\uc758 \uac1d\uccb4\uac00 \ub2e4\ub978 \uac1d\uccb4\uc5d0 \ud3ec\ud568\ub418\ub294 \uac83\uc744 \uc758\ubbf8\n", " - \uc0c8\ub85c\uc6b4 \uad6c\uc131 \uc694\uc18c\uac00 \uae30\uc874\uc758 \uad6c\uc131 \uc694\uc18c \ud2b9\uc131\uc744 \uc9c0\ub2c8\uc9c0\ub9cc \ub450 \uad6c\uc131 \uc694\uc18c \uc0ac\uc774\uc5d0 \uadfc\ubcf8\uc801\uc778 \ucc28\uc774\uc810\uc774 \uc788\ub2e4\uba74 \ud569\uc131\uc744 \uc0ac\uc6a9 " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 13-1 \uc0c1\uc18d\uacfc \ud569\uc131\uc758 \uc608\n", "- Set is a list (IS-A \uad00\uacc4)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "#Inheritance\n", "class Set(list): # \ubcc0\uacbd \uac00\ub2a5(Mutable) \uc9d1\ud569\n", " def union(self, A):\n", " for x in A:\n", " if x not in self:\n", " self.append(x)\n", " return Set(self)\n", " \n", "A = Set([1,2,3])\n", "B = Set([3,4,5])\n", "print A.union(B)\n", "print A\n", "print\n", "\n", "class Set2(list): # \ubcc0\uacbd \ubd88\uac00\ub2a5(Immutable) \uc9d1\ud569\n", " def union(self, A):\n", " res = self[:]\n", " for x in A:\n", " if x not in res:\n", " res.append(x)\n", " return Set(res)\n", "A = Set2([1,2,3])\n", "B = Set2([3,4,5])\n", "print A.union(B)\n", "print A" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[1, 2, 3, 4, 5]\n", "[1, 2, 3, 4, 5]\n", "\n", "[1, 2, 3, 4, 5]\n", "[1, 2, 3]\n" ] } ], "prompt_number": 68 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Set has a list (HAS-A \uad00\uacc4)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "#composition\n", "class Set: # list\ub97c \uc0c1\uc18d\ud558\uc9c0 \uc54a\uc74c, \ubcc0\uacbd \ubd88\uac00\ub2a5(Immutable) \uc9d1\ud569\n", " def __init__(self, d = None):\n", " self.data = d\n", " def union(self, A):\n", " res = self.data[:]\n", " for x in A:\n", " if x not in res:\n", " res.append(x)\n", " return Set(res)\n", " def __getitem__(self, k):\n", " return self.data[k]\n", " def __repr__(self):\n", " return `self.data`\n", " \n", "A = Set([1,2,3])\n", "B = Set([3,4,5])\n", "print A.union(B)\n", "print A" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[1, 2, 3, 4, 5]\n", "[1, 2, 3]\n" ] } ], "prompt_number": 71 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 13-2 \uc0c1\uc18d\uacfc \ud569\uc131\uc758 \ucc28\uc774\uc810 " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uc0c1\uc18d\n", " - \uc7a5\uc810\n", " - \uc0c8\ub85c \ucd94\uac00\ub41c \uae30\ub2a5\ub9cc\uc744 \ud639\uc740 \ubcc0\uacbd\ub418\ub294 \uae30\ub2a5\ub9cc\uc744 \uc791\uc131\ud558\ubbc0\ub85c \ucf54\ub4dc\uac00 \uc9e7\uc544\uc9c0\ub294 \uc7a5\uc810\uc774 \uc788\ub2e4.\n", " - \ub2e4\ud615\uc131\uc744 \uc9c0\uc6d0\ud558\uc5ec \uc11c\ube0c \ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud558\ub294 \ucf54\ub4dc\ub97c \ub354\uc6b1 \uac04\uacb0\ud558\uac8c \uc720\uc9c0\ud560 \uc218 \uc788\ub2e4.\n", " - \ub2e8\uc810\n", " - \uc804\uccb4\uc801\uc73c\ub85c \uc9c0\uc6d0\ub418\ub294 \uc5f0\uc0b0\uc774 \uc5b4\ub5a4 \uac83\uc774 \uc788\ub294 \uc9c0 \ud55c \ub208\uc5d0 \ud30c\uc545\ud558\uae30 \uc5b4\ub835\ub2e4. \n", " - \uc288\ud37c \ud074\ub798\uc2a4\uc758 \ucf54\ub4dc\ub97c \uc0b4\ud3b4 \ubcf4\uc544\uc57c \ud560 \ud544\uc694\uc131\uc774 \uc788\ub2e4.\n", " - \uc0c1\uc18d\ubc1b\uc740 \ud2b9\uc131\uc73c\ub85c \uc778\ud558\uc5ec \uc758\ub3c4\ud558\uc9c0 \uc54a\uc740 \uc18d\uc131 \ubc0f \ud568\uc218\uc5d0 \uc601\ud5a5\ubc1b\uc744 \uc218 \uc788\ub2e4.\n", " - \uc11c\ube0c \ud074\ub798\uc2a4 \uac1d\uccb4 \uc0dd\uc131\uacfc \ub3d9\uc2dc\uc5d0 \uc288\ud37c \ud074\ub798\uc2a4\uc758 \uc774\ubbf8\uc9c0\ub97c \uac00\uc9c0\uac8c \ub418\uba70 \uc11c\ube0c \ud074\ub798\uc2a4 \uac1d\uccb4\uc758 \uc0ad\uc81c \uc2dc\uc810\uae4c\uc9c0 \uc218\uba85\uc744 \uac19\uc774 \ud55c\ub2e4.\n", " \n", "- \ud569\uc131 \n", " - \uc7a5\uc810\n", " - \ud569\uc131\uc774 \uad6c\ud604\ud558\uae30\uc5d0\ub294 \uac1c\ub150\uc801\uc73c\ub85c \ub354 \ub2e8\uc21c\ud558\uba70, \uc5b4\ub5a0\ud55c \uc5f0\uc0b0\uc744 \uc81c\uacf5\ud558\ub294\uc9c0 \uba85\ubc31\ud558\uac8c \ubcf4\uc778\ub2e4.\n", " - \uc790\uc2e0\uc774 \ud3ec\ud568\ud55c \uac1d\uccb4\uc758 \uc2e4\uc81c \uc0dd\uc131\uc744 \ud544\uc694 \uc2dc\uc810\uae4c\uc9c0 \uc5f0\uae30\ud558\uac70\ub098 \ud544\uc694 \uc2dc\uc810\uc5d0 \ud574\ub2f9 \uac1d\uccb4\ub97c \uc5c6\uc5d8 \uc218\ub3c4 \uc788\ub2e4. \n", " - \ub2e8\uc810\n", " - \uc9c0\uc6d0\ud558\ub824\ub294 \ud568\uc218\ub97c \ubaa8\ub450 \uc791\uc131\ud574\uc57c \ud558\ubbc0\ub85c \ucf54\ub4dc\uac00 \uae38\uc5b4\uc9c8 \uc218 \uc788\ub2e4." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "## 14 \ucea1\uc290\ud654\n", "***\n", "- \ucea1\uc290\ud654 (Encapsulation)\n", " - \ud544\uc694\ud55c \uba54\uc18c\ub4dc\ub098 \uc18d\uc131\uc744 \ud558\ub098\uc758 \ub2e8\uc704\ub85c \ubb36\uc5b4\uc11c \uadf8\ub7ec\ud55c \uba54\uc18c\ub4dc\uc640 \uc18d\uc131\uc744 \ub300\ubd80\ubd84 \uc740\ub2c9(Information Hiding)\ud558\uace0, \uc678\ubd80\uc5d0\uc11c \uc811\uadfc\uc774 \ud544\uc694\ud558\ub2e4\uace0 \uc0dd\uac01\ub418\ub294 \uac83\ub4e4\ub9cc \uacf5\uac1c\ud558\ub294 \uae30\uc220\n", " - \uc678\ubd80\ub85c \uacf5\uac1c\ub41c \uac83\ub4e4\uc744 \uc778\ud130\ud398\uc774\uc2a4(Interface)\ub77c\uace0 \ubd80\ub978\ub2e4.\n", "\n", "- \ucea1\uc290\ud654\uc758 \uc885\ub958\n", " - Black Box \ubc29\uc2dd\n", " - \uc644\uc804\ud788 \ub0b4\ubd80 \uc815\ubcf4\uac00 \uc228\uaca8\uc9c0\ub294 \ubc29\uc2dd\n", " - White Box \ubc29\uc2dd\n", " - \ub0b4\ubd80 \uc815\ubcf4\uac00 \uc678\ubd80\uc5d0\uc11c\ub3c4 \uc811\uadfc \uac00\ub2a5\ud558\ub3c4\ub85d \uc5f4\uc5b4\ub193\uc740 \ubc29\uc2dd\n", " - \ud30c\uc774\uc36c\uc5d0\uc11c \ucc44\ud0dd\ud558\ub294 \ubc29\uc2dd\n", "\n", "- \ud30c\uc774\uc36c\uc5d0\uc11c\ub294 \ubaa8\ub4e0 \uc18d\uc131\uc774 public \uc774\ub2e4.\n", " - \uc989, \ud30c\uc774\uc36c\uc740 \uae30\ubcf8\uc801\uc73c\ub85c \ub2e4\ub978 \uc5b8\uc5b4\uc5d0\uc11c \uc81c\uacf5\ub418\ub294 private, protected \uac1c\ub150\uc774 \uc5c6\ub2e4.\n", "\n", "- \ud30c\uc774\uc36c\uc5d0\uc11c private \uc18d\uc131/\uba54\uc18c\ub4dc\ub97c \uc9c0\uc6d0\ud558\ub294 \ubc29\ubc95\n", " - \uc18d\uc131/\uba54\uc18c\ub4dc \uc774\ub984\uc744 \ub450 \uac1c\uc758 \uc5b8\ub354\ub77c\uc778(\\_)\uc73c\ub85c \uc2dc\uc791\n", " - \ub0b4\ubd80\uc801\uc73c\ub85c \uc0ac\uc6a9\ud574\uc57c \ud560 \uc18d\uc131 \ubc0f \uba54\uc18c\ub4dc\uc5d0 \ub300\ud574 \uc5b8\ub354\ub77c\uc778 \uc18d\uc131/\uba54\uc18c\ub4dc\ub85c \uc815\uc758\n", " - \uc774\ub7ec\ud55c \uc18d\uc131/\uba54\uc18c\ub4dc\ub4e4\uc740 \ud074\ub798\uc2a4 \ub0b4\ubd80 \ub610\ub294 \uc0c1\uc18d\ub41c \ud074\ub798\uc2a4\uc5d0\uc11c\ub9cc \ud65c\uc6a9" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Encapsulation: # \ub450\uac1c\uc758 \ud074\ub798\uc2a4\uba64\ubc84\ub97c \uac00\uc9c0\ub294 \ud074\ub798\uc2a4\uc815\uc758\n", " z = 10\n", " __x = 1\n", " def __g():\n", " pass\n", " \n", "print Encapsulation.z # z \ub294 \uc811\uadfc\uac00\ub2a5\n", "print Encapsulation.__x #__x\ub294 \uc811\uadfc\uac00\ub2a5\ud558\uc9c0\uc54a\uc74c, \uc608\uc678\ubc1c\uc0dd" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "10\n" ] }, { "ename": "AttributeError", "evalue": "class Encapsulation has no attribute '__x'", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;32mprint\u001b[0m \u001b[0mEncapsulation\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mz\u001b[0m \u001b[0;31m# z \ub294 \uc811\uadfc\uac00\ub2a5\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m \u001b[0;32mprint\u001b[0m \u001b[0mEncapsulation\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__x\u001b[0m \u001b[0;31m#__x\ub294 \uc811\uadfc\uac00\ub2a5\ud558\uc9c0\uc54a\uc74c, \uc608\uc678\ubc1c\uc0dd\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m: class Encapsulation has no attribute '__x'" ] } ], "prompt_number": 78 }, { "cell_type": "markdown", "metadata": {}, "source": [ "- \uc774\ub984 \uacf5\uac04\uc744 dir() \ub0b4\uc7a5 \ud568\uc218\ub85c \uc0b4\ud3b4\ubcf4\uba74 z\ub294 \uadf8\ub300\ub85c \uc788\ub294\ub370 \\_\\_x\uc640 \\_\\_g\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \ubcc0\uacbd\ub418\uc5b4 \uc774\ub984\uc774 \uc800\uc7a5\ub418\uc5b4 \uc788\ub2e4.\n", " - \\_\\_x ==> \\_Encapsulation\\_\\_x\n", " - \\_\\_g ==> \\_Encapsulation\\_\\_g" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print dir(Encapsulation)\n", "print\n", "\n", "print Encapsulation._Encapsulation__x # \ubcc0\uacbd\ub41c \uc774\ub984\uc73c\ub85c \uc811\uadfc \uac00\ub2a5" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "['_Encapsulation__g', '_Encapsulation__x', '__doc__', '__module__', 'z']\n", "\n", "1\n" ] } ], "prompt_number": 79 }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "## 15 \uc704\uc784\n", "***\n", "- \uc0dd\ub7b5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "## 16 \uba54\uc3d8\ub4dc \uac1d\uccb4\uc758 \uc18d\uc131\n", "***\n", "- \uc0dd\ub7b5" ] } ], "metadata": {} } ] }