|
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