|
300 | 300 | "## Creating an abstract base class (ABC)\n", |
301 | 301 | "\n", |
302 | 302 | "- define a media player as an *abstraction*\n", |
303 | | - "- each unique kind of media file format can provide a *concrete* implementation of the abstraction\n" |
| 303 | + "- each unique kind of media file format can provide a *concrete* implementation of the abstraction\n", |
| 304 | + "- use `pass` or `...` keywords to complete the function definition\n", |
| 305 | + "- doc string also syntactically completes the function definition" |
304 | 306 | ] |
305 | 307 | }, |
306 | 308 | { |
307 | 309 | "cell_type": "code", |
308 | | - "execution_count": 2, |
| 310 | + "execution_count": 5, |
309 | 311 | "id": "5e57a147", |
310 | 312 | "metadata": {}, |
311 | 313 | "outputs": [], |
|
320 | 322 | " @property\n", |
321 | 323 | " @abc.abstractmethod\n", |
322 | 324 | " def ext(self) -> str:\n", |
323 | | - " ... # placeholder" |
| 325 | + " pass # placeholder" |
324 | 326 | ] |
325 | 327 | }, |
326 | 328 | { |
327 | 329 | "cell_type": "code", |
328 | | - "execution_count": 3, |
| 330 | + "execution_count": 2, |
329 | 331 | "id": "294121e7", |
330 | 332 | "metadata": {}, |
331 | 333 | "outputs": [ |
|
335 | 337 | "frozenset({'ext', 'play'})" |
336 | 338 | ] |
337 | 339 | }, |
338 | | - "execution_count": 3, |
| 340 | + "execution_count": 2, |
339 | 341 | "metadata": {}, |
340 | 342 | "output_type": "execute_result" |
341 | 343 | } |
|
347 | 349 | }, |
348 | 350 | { |
349 | 351 | "cell_type": "code", |
350 | | - "execution_count": 4, |
| 352 | + "execution_count": 3, |
351 | 353 | "id": "1441f4f5", |
352 | 354 | "metadata": {}, |
353 | 355 | "outputs": [], |
|
360 | 362 | }, |
361 | 363 | { |
362 | 364 | "cell_type": "code", |
363 | | - "execution_count": 5, |
| 365 | + "execution_count": 4, |
364 | 366 | "id": "e48e0a24", |
365 | 367 | "metadata": {}, |
366 | 368 | "outputs": [ |
|
371 | 373 | "traceback": [ |
372 | 374 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", |
373 | 375 | "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", |
374 | | - "Cell \u001b[0;32mIn[5], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m wav \u001b[38;5;241m=\u001b[39m \u001b[43mWav\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", |
| 376 | + "Cell \u001b[0;32mIn[4], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m wav \u001b[38;5;241m=\u001b[39m \u001b[43mWav\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", |
375 | 377 | "\u001b[0;31mTypeError\u001b[0m: Can't instantiate abstract class Wav without an implementation for abstract methods 'ext', 'play'" |
376 | 378 | ] |
377 | 379 | } |
|
2289 | 2291 | }, |
2290 | 2292 | { |
2291 | 2293 | "cell_type": "code", |
2292 | | - "execution_count": 26, |
| 2294 | + "execution_count": 6, |
2293 | 2295 | "id": "705402ce", |
2294 | 2296 | "metadata": {}, |
2295 | 2297 | "outputs": [], |
|
2299 | 2301 | }, |
2300 | 2302 | { |
2301 | 2303 | "cell_type": "code", |
2302 | | - "execution_count": 27, |
| 2304 | + "execution_count": 7, |
2303 | 2305 | "id": "16c60228", |
2304 | 2306 | "metadata": {}, |
2305 | 2307 | "outputs": [], |
|
2309 | 2311 | }, |
2310 | 2312 | { |
2311 | 2313 | "cell_type": "code", |
2312 | | - "execution_count": 28, |
| 2314 | + "execution_count": 8, |
2313 | 2315 | "id": "b40b289e", |
2314 | 2316 | "metadata": {}, |
2315 | 2317 | "outputs": [ |
|
2319 | 2321 | "True" |
2320 | 2322 | ] |
2321 | 2323 | }, |
2322 | | - "execution_count": 28, |
| 2324 | + "execution_count": 8, |
2323 | 2325 | "metadata": {}, |
2324 | 2326 | "output_type": "execute_result" |
2325 | 2327 | } |
|
2330 | 2332 | }, |
2331 | 2333 | { |
2332 | 2334 | "cell_type": "code", |
2333 | | - "execution_count": 13, |
| 2335 | + "execution_count": 9, |
2334 | 2336 | "id": "79cdfb0c", |
2335 | 2337 | "metadata": {}, |
2336 | 2338 | "outputs": [], |
|
2350 | 2352 | }, |
2351 | 2353 | { |
2352 | 2354 | "cell_type": "code", |
2353 | | - "execution_count": 14, |
| 2355 | + "execution_count": 11, |
2354 | 2356 | "id": "5ad8ae13", |
2355 | 2357 | "metadata": {}, |
2356 | 2358 | "outputs": [], |
|
2410 | 2412 | }, |
2411 | 2413 | { |
2412 | 2414 | "cell_type": "code", |
2413 | | - "execution_count": 15, |
| 2415 | + "execution_count": 12, |
2414 | 2416 | "id": "d792e308", |
2415 | 2417 | "metadata": {}, |
2416 | 2418 | "outputs": [], |
|
2420 | 2422 | }, |
2421 | 2423 | { |
2422 | 2424 | "cell_type": "code", |
2423 | | - "execution_count": 16, |
| 2425 | + "execution_count": 13, |
2424 | 2426 | "id": "f0856d8e", |
2425 | 2427 | "metadata": {}, |
2426 | 2428 | "outputs": [ |
|
2430 | 2432 | "True" |
2431 | 2433 | ] |
2432 | 2434 | }, |
2433 | | - "execution_count": 16, |
| 2435 | + "execution_count": 13, |
2434 | 2436 | "metadata": {}, |
2435 | 2437 | "output_type": "execute_result" |
2436 | 2438 | } |
|
2441 | 2443 | }, |
2442 | 2444 | { |
2443 | 2445 | "cell_type": "code", |
2444 | | - "execution_count": 17, |
| 2446 | + "execution_count": 14, |
2445 | 2447 | "id": "dc87e61e", |
2446 | 2448 | "metadata": {}, |
2447 | 2449 | "outputs": [ |
|
2451 | 2453 | "False" |
2452 | 2454 | ] |
2453 | 2455 | }, |
2454 | | - "execution_count": 17, |
| 2456 | + "execution_count": 14, |
2455 | 2457 | "metadata": {}, |
2456 | 2458 | "output_type": "execute_result" |
2457 | 2459 | } |
|
2462 | 2464 | }, |
2463 | 2465 | { |
2464 | 2466 | "cell_type": "code", |
2465 | | - "execution_count": 18, |
| 2467 | + "execution_count": 15, |
2466 | 2468 | "id": "10fe3839", |
2467 | 2469 | "metadata": {}, |
2468 | 2470 | "outputs": [ |
|
2472 | 2474 | "26" |
2473 | 2475 | ] |
2474 | 2476 | }, |
2475 | | - "execution_count": 18, |
| 2477 | + "execution_count": 15, |
2476 | 2478 | "metadata": {}, |
2477 | 2479 | "output_type": "execute_result" |
2478 | 2480 | } |
|
2483 | 2485 | }, |
2484 | 2486 | { |
2485 | 2487 | "cell_type": "code", |
2486 | | - "execution_count": 19, |
| 2488 | + "execution_count": 16, |
2487 | 2489 | "id": "dd8831c1", |
2488 | 2490 | "metadata": {}, |
2489 | 2491 | "outputs": [ |
|
2494 | 2496 | "traceback": [ |
2495 | 2497 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", |
2496 | 2498 | "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", |
2497 | | - "Cell \u001b[0;32mIn[19], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mlook\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mm\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\n", |
2498 | | - "Cell \u001b[0;32mIn[14], line 50\u001b[0m, in \u001b[0;36mLookup.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 48\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m key \u001b[38;5;241m==\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mkey_list[index]:\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mvalue_list[index]\n\u001b[0;32m---> 50\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(key)\n", |
| 2499 | + "Cell \u001b[0;32mIn[16], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mlook\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mm\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\n", |
| 2500 | + "Cell \u001b[0;32mIn[11], line 50\u001b[0m, in \u001b[0;36mLookup.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 48\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m key \u001b[38;5;241m==\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mkey_list[index]:\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mvalue_list[index]\n\u001b[0;32m---> 50\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(key)\n", |
2499 | 2501 | "\u001b[0;31mKeyError\u001b[0m: 'm'" |
2500 | 2502 | ] |
2501 | 2503 | } |
|
2506 | 2508 | }, |
2507 | 2509 | { |
2508 | 2510 | "cell_type": "code", |
2509 | | - "execution_count": 20, |
| 2511 | + "execution_count": 17, |
2510 | 2512 | "id": "bb8c7c86", |
2511 | 2513 | "metadata": {}, |
2512 | 2514 | "outputs": [ |
|
2528 | 2530 | }, |
2529 | 2531 | { |
2530 | 2532 | "cell_type": "code", |
2531 | | - "execution_count": 22, |
| 2533 | + "execution_count": 18, |
2532 | 2534 | "id": "781ea19a", |
2533 | 2535 | "metadata": {}, |
2534 | 2536 | "outputs": [], |
|
2544 | 2546 | }, |
2545 | 2547 | { |
2546 | 2548 | "cell_type": "code", |
2547 | | - "execution_count": 23, |
| 2549 | + "execution_count": 19, |
2548 | 2550 | "id": "53aa2e9f", |
2549 | 2551 | "metadata": {}, |
2550 | 2552 | "outputs": [ |
|
2554 | 2556 | "'Apple'" |
2555 | 2557 | ] |
2556 | 2558 | }, |
2557 | | - "execution_count": 23, |
| 2559 | + "execution_count": 19, |
2558 | 2560 | "metadata": {}, |
2559 | 2561 | "output_type": "execute_result" |
2560 | 2562 | } |
|
2565 | 2567 | }, |
2566 | 2568 | { |
2567 | 2569 | "cell_type": "code", |
2568 | | - "execution_count": 24, |
| 2570 | + "execution_count": 20, |
2569 | 2571 | "id": "7debae1a", |
2570 | 2572 | "metadata": {}, |
2571 | 2573 | "outputs": [ |
|
2576 | 2578 | "traceback": [ |
2577 | 2579 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", |
2578 | 2580 | "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", |
2579 | | - "Cell \u001b[0;32mIn[24], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mx\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m10\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\n", |
2580 | | - "Cell \u001b[0;32mIn[14], line 50\u001b[0m, in \u001b[0;36mLookup.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 48\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m key \u001b[38;5;241m==\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mkey_list[index]:\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mvalue_list[index]\n\u001b[0;32m---> 50\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(key)\n", |
| 2581 | + "Cell \u001b[0;32mIn[20], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mx\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m10\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\n", |
| 2582 | + "Cell \u001b[0;32mIn[11], line 50\u001b[0m, in \u001b[0;36mLookup.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 48\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m key \u001b[38;5;241m==\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mkey_list[index]:\n\u001b[1;32m 49\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mvalue_list[index]\n\u001b[0;32m---> 50\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(key)\n", |
2581 | 2583 | "\u001b[0;31mKeyError\u001b[0m: '10'" |
2582 | 2584 | ] |
2583 | 2585 | } |
|
2586 | 2588 | "x['10']" |
2587 | 2589 | ] |
2588 | 2590 | }, |
| 2591 | + { |
| 2592 | + "cell_type": "code", |
| 2593 | + "execution_count": 21, |
| 2594 | + "id": "46bf015b-f43b-4e11-8095-24e45ae193fd", |
| 2595 | + "metadata": {}, |
| 2596 | + "outputs": [ |
| 2597 | + { |
| 2598 | + "ename": "TypeError", |
| 2599 | + "evalue": "'Lookup' object does not support item assignment", |
| 2600 | + "output_type": "error", |
| 2601 | + "traceback": [ |
| 2602 | + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", |
| 2603 | + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", |
| 2604 | + "Cell \u001b[0;32mIn[21], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mx\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m10\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mTen\u001b[39m\u001b[38;5;124m'\u001b[39m\n", |
| 2605 | + "\u001b[0;31mTypeError\u001b[0m: 'Lookup' object does not support item assignment" |
| 2606 | + ] |
| 2607 | + } |
| 2608 | + ], |
| 2609 | + "source": [ |
| 2610 | + "# Immutable dictionary! __setitem__ is not implemented!\n", |
| 2611 | + "x['10'] = 'Ten'" |
| 2612 | + ] |
| 2613 | + }, |
2589 | 2614 | { |
2590 | 2615 | "cell_type": "markdown", |
2591 | 2616 | "id": "f6b36878", |
|
3069 | 3094 | " return self[i]\n", |
3070 | 3095 | "```\n", |
3071 | 3096 | " \n", |
3072 | | - "2. Create a new data structure called CD inherited from MutableSequence.\n", |
| 3097 | + "2. Solve Kattis CD problem - https://open.kattis.com/problems/cd using ABC and OOD\n", |
| 3098 | + " - Create a new data structure called CD inherited from MutableSequence.\n", |
3073 | 3099 | " - CD must have `common()` interface method to find the intersection between other CD object\n", |
3074 | 3100 | " - `__and__()` method overloads `&` intersection operator\n", |
3075 | 3101 | " - e.g., jack & jill\n", |
|
0 commit comments