|
25 | 25 | } |
26 | 26 | }, |
27 | 27 | "source": [ |
28 | | - "# Terminology" |
29 | | - ] |
30 | | - }, |
31 | | - { |
32 | | - "cell_type": "markdown", |
33 | | - "metadata": { |
34 | | - "slideshow": { |
35 | | - "slide_type": "fragment" |
36 | | - } |
37 | | - }, |
38 | | - "source": [ |
39 | | - "* \"Dunder\" is used to reference \"double underscore\" names." |
40 | | - ] |
41 | | - }, |
42 | | - { |
43 | | - "cell_type": "markdown", |
44 | | - "metadata": { |
45 | | - "slideshow": { |
46 | | - "slide_type": "fragment" |
47 | | - } |
48 | | - }, |
49 | | - "source": [ |
| 28 | + "# Terminology\n", |
| 29 | + "\n", |
| 30 | + "* \"Dunder\" is used to reference \"double underscore\" names.\n", |
| 31 | + "\n", |
50 | 32 | "* E.g. `__init__()` is called \"dunder init\"." |
51 | 33 | ] |
52 | 34 | }, |
|
58 | 40 | } |
59 | 41 | }, |
60 | 42 | "source": [ |
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": [ |
| 43 | + "# Magic Methods\n", |
| 44 | + "\n", |
| 45 | + "* Special methods with reserved names.\n", |
| 46 | + "\n", |
| 47 | + "* Beautiful, intuitive, and standard ways of performing basic operations.\n", |
| 48 | + "\n", |
83 | 49 | "* Define meaning for operators so that we can use them on our own classes like they were built in types." |
84 | 50 | ] |
85 | 51 | }, |
|
163 | 129 | }, |
164 | 130 | "outputs": [], |
165 | 131 | "source": [ |
166 | | - "(2).__pow__(3) " |
| 132 | + "(2).__pow__(3) " |
167 | 133 | ] |
168 | 134 | }, |
169 | 135 | { |
|
188 | 154 | } |
189 | 155 | }, |
190 | 156 | "source": [ |
191 | | - "# What about our own custom objects?" |
192 | | - ] |
193 | | - }, |
194 | | - { |
195 | | - "cell_type": "markdown", |
196 | | - "metadata": { |
197 | | - "slideshow": { |
198 | | - "slide_type": "fragment" |
199 | | - } |
200 | | - }, |
201 | | - "source": [ |
202 | | - "* We can add magic methods to make our own objects behave like built-in types." |
203 | | - ] |
204 | | - }, |
205 | | - { |
206 | | - "cell_type": "markdown", |
207 | | - "metadata": { |
208 | | - "slideshow": { |
209 | | - "slide_type": "fragment" |
210 | | - } |
211 | | - }, |
212 | | - "source": [ |
213 | | - "* Why would we do that?" |
214 | | - ] |
215 | | - }, |
216 | | - { |
217 | | - "cell_type": "markdown", |
218 | | - "metadata": { |
219 | | - "slideshow": { |
220 | | - "slide_type": "fragment" |
221 | | - } |
222 | | - }, |
223 | | - "source": [ |
224 | | - "* Expressiveness!" |
225 | | - ] |
226 | | - }, |
227 | | - { |
228 | | - "cell_type": "markdown", |
229 | | - "metadata": { |
230 | | - "slideshow": { |
231 | | - "slide_type": "fragment" |
232 | | - } |
233 | | - }, |
234 | | - "source": [ |
235 | | - "* ...and it's zen." |
| 157 | + "# What about our own custom objects?\n", |
| 158 | + "\n", |
| 159 | + "* We can add magic methods to make our own objects behave like built-in types.\n", |
| 160 | + "\n", |
| 161 | + "* Why would we do that?\n", |
| 162 | + "\n", |
| 163 | + "* Expressiveness!\n", |
| 164 | + "\n", |
| 165 | + "* It is Zen." |
236 | 166 | ] |
237 | 167 | }, |
238 | 168 | { |
|
441 | 371 | "### This is why!" |
442 | 372 | ] |
443 | 373 | }, |
| 374 | + { |
| 375 | + "cell_type": "markdown", |
| 376 | + "metadata": { |
| 377 | + "slideshow": { |
| 378 | + "slide_type": "fragment" |
| 379 | + } |
| 380 | + }, |
| 381 | + "source": [ |
| 382 | + "The identity operator `is` returns true only if the `id()` function on both objects is equal." |
| 383 | + ] |
| 384 | + }, |
| 385 | + { |
| 386 | + "cell_type": "code", |
| 387 | + "execution_count": null, |
| 388 | + "metadata": { |
| 389 | + "collapsed": false, |
| 390 | + "slideshow": { |
| 391 | + "slide_type": "fragment" |
| 392 | + } |
| 393 | + }, |
| 394 | + "outputs": [], |
| 395 | + "source": [ |
| 396 | + "hex(id(slc1)), hex(id(slc2)) " |
| 397 | + ] |
| 398 | + }, |
444 | 399 | { |
445 | 400 | "cell_type": "code", |
446 | 401 | "execution_count": null, |
|
452 | 407 | }, |
453 | 408 | "outputs": [], |
454 | 409 | "source": [ |
455 | | - "hex(id(slc1)), hex(id(slc2))" |
| 410 | + "slc1 is slc2" |
456 | 411 | ] |
457 | 412 | }, |
458 | 413 | { |
|
699 | 654 | } |
700 | 655 | }, |
701 | 656 | "source": [ |
702 | | - "# One solution\n", |
| 657 | + "# Old and busted\n", |
703 | 658 | "\n", |
704 | 659 | "* Create a method to compute distance from the instance to supplied Point instance." |
705 | 660 | ] |
|
751 | 706 | } |
752 | 707 | }, |
753 | 708 | "source": [ |
754 | | - "# The magic solution\n", |
| 709 | + "# New hotness\n", |
755 | 710 | "\n", |
756 | 711 | "* The `__sub__()` magic method." |
757 | 712 | ] |
|
926 | 881 | } |
927 | 882 | }, |
928 | 883 | "source": [ |
929 | | - "# Point without magic" |
| 884 | + "# Old and busted" |
930 | 885 | ] |
931 | 886 | }, |
932 | 887 | { |
|
987 | 942 | } |
988 | 943 | }, |
989 | 944 | "source": [ |
990 | | - "# Point with magic" |
| 945 | + "# New hotness" |
991 | 946 | ] |
992 | 947 | }, |
993 | 948 | { |
|
1048 | 1003 | } |
1049 | 1004 | }, |
1050 | 1005 | "source": [ |
1051 | | - "# Distance with magic" |
| 1006 | + "# More new hotness" |
1052 | 1007 | ] |
1053 | 1008 | }, |
1054 | 1009 | { |
|
0 commit comments