|
14 | 14 | "## Scott Overholser\n",
|
15 | 15 | "<br/>\n",
|
16 | 16 | "<br/>\n",
|
17 |
| - "## https://github.com/eigenholser\n" |
| 17 | + "## https://github.com/eigenholser/python-magic-methods\n" |
18 | 18 | ]
|
19 | 19 | },
|
20 | 20 | {
|
|
58 | 58 | }
|
59 | 59 | },
|
60 | 60 | "source": [
|
61 |
| - "# Python objects" |
| 61 | + "# Magic Methods" |
| 62 | + ] |
| 63 | + }, |
| 64 | + { |
| 65 | + "cell_type": "markdown", |
| 66 | + "metadata": { |
| 67 | + "slideshow": { |
| 68 | + "slide_type": "fragment" |
| 69 | + } |
| 70 | + }, |
| 71 | + "source": [ |
| 72 | + "* Beautiful, intuitive, and standard ways of performing basic operations." |
| 73 | + ] |
| 74 | + }, |
| 75 | + { |
| 76 | + "cell_type": "markdown", |
| 77 | + "metadata": { |
| 78 | + "slideshow": { |
| 79 | + "slide_type": "fragment" |
| 80 | + } |
| 81 | + }, |
| 82 | + "source": [ |
| 83 | + "* Define meaning for operators so that we can use them on our own classes like they were built in types." |
| 84 | + ] |
| 85 | + }, |
| 86 | + { |
| 87 | + "cell_type": "markdown", |
| 88 | + "metadata": { |
| 89 | + "slideshow": { |
| 90 | + "slide_type": "subslide" |
| 91 | + } |
| 92 | + }, |
| 93 | + "source": [ |
| 94 | + "# Python Built-in Types" |
62 | 95 | ]
|
63 | 96 | },
|
64 | 97 | {
|
65 | 98 | "cell_type": "code",
|
66 | 99 | "execution_count": null,
|
67 | 100 | "metadata": {
|
68 | 101 | "collapsed": false,
|
| 102 | + "scrolled": true, |
69 | 103 | "slideshow": {
|
70 | 104 | "slide_type": "fragment"
|
71 | 105 | }
|
|
129 | 163 | },
|
130 | 164 | "outputs": [],
|
131 | 165 | "source": [
|
132 |
| - "(2).__pow__(3)" |
| 166 | + "(2).__pow__(3) " |
133 | 167 | ]
|
134 | 168 | },
|
135 | 169 | {
|
|
150 | 184 | "cell_type": "markdown",
|
151 | 185 | "metadata": {
|
152 | 186 | "slideshow": {
|
153 |
| - "slide_type": "slide" |
| 187 | + "slide_type": "subslide" |
154 | 188 | }
|
155 | 189 | },
|
156 | 190 | "source": [
|
|
165 | 199 | }
|
166 | 200 | },
|
167 | 201 | "source": [
|
168 |
| - "* We can add magic methods to objects that we create." |
| 202 | + "* We can add magic methods to make our own objects behave like built-in types." |
169 | 203 | ]
|
170 | 204 | },
|
171 | 205 | {
|
|
187 | 221 | }
|
188 | 222 | },
|
189 | 223 | "source": [
|
190 |
| - "* Expressiveness" |
| 224 | + "* Expressiveness!" |
191 | 225 | ]
|
192 | 226 | },
|
193 | 227 | {
|
194 | 228 | "cell_type": "markdown",
|
195 | 229 | "metadata": {
|
196 |
| - "slideshow": { |
197 |
| - "slide_type": "subslide" |
198 |
| - } |
199 |
| - }, |
200 |
| - "source": [ |
201 |
| - "## The Zen of Python" |
202 |
| - ] |
203 |
| - }, |
204 |
| - { |
205 |
| - "cell_type": "code", |
206 |
| - "execution_count": null, |
207 |
| - "metadata": { |
208 |
| - "collapsed": false, |
209 | 230 | "slideshow": {
|
210 | 231 | "slide_type": "fragment"
|
211 | 232 | }
|
212 | 233 | },
|
213 |
| - "outputs": [], |
214 | 234 | "source": [
|
215 |
| - "import this" |
| 235 | + "* ...and it's zen." |
216 | 236 | ]
|
217 | 237 | },
|
218 | 238 | {
|
|
223 | 243 | }
|
224 | 244 | },
|
225 | 245 | "source": [
|
226 |
| - "# Magic Methods" |
227 |
| - ] |
228 |
| - }, |
229 |
| - { |
230 |
| - "cell_type": "markdown", |
231 |
| - "metadata": { |
232 |
| - "slideshow": { |
233 |
| - "slide_type": "fragment" |
234 |
| - } |
235 |
| - }, |
236 |
| - "source": [ |
237 |
| - "* Beautiful, intuitive, and standard ways of performing basic operations." |
| 246 | + "## The Zen of Python" |
238 | 247 | ]
|
239 | 248 | },
|
240 | 249 | {
|
241 |
| - "cell_type": "markdown", |
| 250 | + "cell_type": "code", |
| 251 | + "execution_count": null, |
242 | 252 | "metadata": {
|
| 253 | + "collapsed": false, |
243 | 254 | "slideshow": {
|
244 | 255 | "slide_type": "fragment"
|
245 | 256 | }
|
246 | 257 | },
|
| 258 | + "outputs": [], |
247 | 259 | "source": [
|
248 |
| - "* Define meaning for operators so that we can use them on our own classes like they were built in types." |
| 260 | + "import this" |
249 | 261 | ]
|
250 | 262 | },
|
251 | 263 | {
|
|
312 | 324 | },
|
313 | 325 | "outputs": [],
|
314 | 326 | "source": [
|
315 |
| - "CAN, JFK, LAX, SLC" |
| 327 | + "CAN, JFK, LAX, SLC\n" |
316 | 328 | ]
|
317 | 329 | },
|
318 | 330 | {
|
319 | 331 | "cell_type": "markdown",
|
320 | 332 | "metadata": {
|
321 | 333 | "slideshow": {
|
322 |
| - "slide_type": "subslide" |
| 334 | + "slide_type": "slide" |
323 | 335 | }
|
324 | 336 | },
|
325 | 337 | "source": [
|
326 |
| - "## Instantiate some objects" |
| 338 | + "# Object Construction\n", |
| 339 | + "\n", |
| 340 | + "* The `__init__(self, [args...])` magic method." |
327 | 341 | ]
|
328 | 342 | },
|
329 | 343 | {
|
|
360 | 374 | }
|
361 | 375 | },
|
362 | 376 | "source": [
|
363 |
| - "# `__init__()`" |
364 |
| - ] |
365 |
| - }, |
366 |
| - { |
367 |
| - "cell_type": "markdown", |
368 |
| - "metadata": { |
369 |
| - "slideshow": { |
370 |
| - "slide_type": "fragment" |
371 |
| - } |
372 |
| - }, |
373 |
| - "source": [ |
374 |
| - "# TODO: `__init__()` stuff" |
375 |
| - ] |
376 |
| - }, |
377 |
| - { |
378 |
| - "cell_type": "markdown", |
379 |
| - "metadata": { |
380 |
| - "slideshow": { |
381 |
| - "slide_type": "subslide" |
382 |
| - } |
383 |
| - }, |
384 |
| - "source": [ |
385 |
| - "# Equality\n", |
| 377 | + "# Object Equality\n", |
386 | 378 | "\n",
|
387 |
| - "* The `__eq__()` magic method." |
| 379 | + "* The `__eq__(self, other)` magic method." |
388 | 380 | ]
|
389 | 381 | },
|
390 | 382 | {
|
|
576 | 568 | "source": [
|
577 | 569 | "### Now let's try it with Magic!\n",
|
578 | 570 | "\n",
|
579 |
| - "* The `__eq__()` method is defined." |
| 571 | + "* The `__eq__()` magic method is defined." |
580 | 572 | ]
|
581 | 573 | },
|
582 | 574 | {
|
|
593 | 585 | "m_slc1 == m_slc2"
|
594 | 586 | ]
|
595 | 587 | },
|
| 588 | + { |
| 589 | + "cell_type": "markdown", |
| 590 | + "metadata": { |
| 591 | + "slideshow": { |
| 592 | + "slide_type": "fragment" |
| 593 | + } |
| 594 | + }, |
| 595 | + "source": [ |
| 596 | + "* That is exactly what we mean isn't it?!" |
| 597 | + ] |
| 598 | + }, |
596 | 599 | {
|
597 | 600 | "cell_type": "markdown",
|
598 | 601 | "metadata": {
|
|
671 | 674 | "\n",
|
672 | 675 | "* Intuitively, the distance between two points is the difference.\n",
|
673 | 676 | "* This implies subtraction.\n",
|
674 |
| - "* The `__sub__()` magic method." |
| 677 | + "* The `__sub__(self, other)` magic method." |
675 | 678 | ]
|
676 | 679 | },
|
677 | 680 | {
|
|
791 | 794 | }
|
792 | 795 | },
|
793 | 796 | "source": [
|
794 |
| - "# Representation of objects" |
| 797 | + "# Representation of objects\n", |
| 798 | + "\n", |
| 799 | + "* The `__repr__(self)` magic method.\n", |
| 800 | + "* The `__str__(self)` magic method.\n", |
| 801 | + "* The `__format__(self, formatstr)` magic method." |
795 | 802 | ]
|
796 | 803 | },
|
797 | 804 | {
|
|
802 | 809 | }
|
803 | 810 | },
|
804 | 811 | "source": [
|
805 |
| - "# `__repr__()`" |
| 812 | + "# `__repr__(self)`" |
806 | 813 | ]
|
807 | 814 | },
|
808 | 815 | {
|
|
855 | 862 | }
|
856 | 863 | },
|
857 | 864 | "source": [
|
858 |
| - "# `__str__()`" |
| 865 | + "# `__str__(self)`" |
859 | 866 | ]
|
860 | 867 | },
|
861 | 868 | {
|
|
908 | 915 | }
|
909 | 916 | },
|
910 | 917 | "source": [
|
911 |
| - "# `__format__()`" |
| 918 | + "# `__format__(self, formatstr)`" |
912 | 919 | ]
|
913 | 920 | },
|
914 | 921 | {
|
|
1151 | 1158 | "source": [
|
1152 | 1159 | "# Calling an object like a function\n",
|
1153 | 1160 | "\n",
|
1154 |
| - "* `__call__()`" |
| 1161 | + "* `__call__(self, [args...])`" |
1155 | 1162 | ]
|
1156 | 1163 | },
|
1157 | 1164 | {
|
|
1187 | 1194 | }
|
1188 | 1195 | },
|
1189 | 1196 | "source": [
|
1190 |
| - "# `__del__()`" |
| 1197 | + "# Object Destruction\n", |
| 1198 | + "\n", |
| 1199 | + "* The `__del__(self)` magic method.\n", |
| 1200 | + "* Called when the object is garbage collected." |
1191 | 1201 | ]
|
1192 | 1202 | },
|
1193 | 1203 | {
|
|
1252 | 1262 | "name": "python",
|
1253 | 1263 | "nbconvert_exporter": "python",
|
1254 | 1264 | "pygments_lexer": "ipython3",
|
1255 |
| - "version": "3.4.3" |
| 1265 | + "version": "3.5.1+" |
1256 | 1266 | }
|
1257 | 1267 | },
|
1258 | 1268 | "nbformat": 4,
|
|
0 commit comments