|
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