|
234 | 234 | <li class="toctree-l2"><a class="reference internal" href="../Chapter2/dataclasses.html">3.7. Data Classes</a></li>
|
235 | 235 | <li class="toctree-l2"><a class="reference internal" href="../Chapter2/typing.html">3.8. Typing</a></li>
|
236 | 236 | <li class="toctree-l2"><a class="reference internal" href="../Chapter2/pathlib.html">3.9. pathlib</a></li>
|
| 237 | +<li class="toctree-l2"><a class="reference internal" href="../Chapter2/pydantic.html">3.10. Pydantic</a></li> |
237 | 238 | </ul>
|
238 | 239 | </li>
|
239 | 240 | <li class="toctree-l1 has-children"><a class="reference internal" href="../Chapter3/Chapter3.html">4. Pandas</a><input class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" type="checkbox"/><label class="toctree-toggle" for="toctree-checkbox-4"><i class="fa-solid fa-chevron-down"></i></label><ul>
|
@@ -625,39 +626,41 @@ <h2><span class="section-number">2.6.1. </span>Inheritance in Python<a class="he
|
625 | 626 | </section>
|
626 | 627 | <section id="abstract-classes-declare-methods-without-implementation">
|
627 | 628 | <h2><span class="section-number">2.6.2. </span>Abstract Classes: Declare Methods without Implementation<a class="headerlink" href="#abstract-classes-declare-methods-without-implementation" title="Permalink to this heading">#</a></h2>
|
628 |
| -<p>Sometimes you might want different classes to use the same attributes and methods. But the implementation of those methods can be slightly different in each class.</p> |
629 |
| -<p>A good way to implement this is to use abstract classes. An abstract class contains one or more abstract methods.</p> |
630 |
| -<p>An abstract method is a method that is declared but contains no implementation. The abstract method requires subclasses to provide implementations.</p> |
| 629 | +<p>To ensure that all subclasses implement a set of methods and properties, use abstract methods within an abstract class. This promotes code reusability and a consistent interface across different implementations.</p> |
| 630 | +<p>In the following code, Drink serves as an abstract class with an abstract method consume.</p> |
631 | 631 | <div class="cell docutils container">
|
632 | 632 | <div class="cell_input docutils container">
|
633 |
| -<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">abc</span> <span class="kn">import</span> <span class="n">ABC</span><span class="p">,</span> <span class="n">abstractmethod</span> |
| 633 | +<div class="highlight-ipython3 notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">abc</span> <span class="kn">import</span> <span class="n">ABC</span><span class="p">,</span> <span class="n">abstractmethod</span> |
634 | 634 |
|
635 |
| -<span class="k">class</span> <span class="nc">Animal</span><span class="p">(</span><span class="n">ABC</span><span class="p">):</span> |
636 | 635 |
|
637 |
| - <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span> |
638 |
| - <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span> |
639 |
| - <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span> |
| 636 | +<span class="k">class</span> <span class="nc">Drink</span><span class="p">(</span><span class="n">ABC</span><span class="p">):</span> |
| 637 | + <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">volume</span><span class="p">):</span> |
| 638 | + <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span> |
| 639 | + <span class="bp">self</span><span class="o">.</span><span class="n">volume</span> <span class="o">=</span> <span class="n">volume</span> |
| 640 | + |
| 641 | + <span class="nd">@abstractmethod</span> |
| 642 | + <span class="k">def</span> <span class="nf">consume</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
| 643 | + <span class="k">pass</span> |
| 644 | + |
| 645 | + |
| 646 | +<span class="k">class</span> <span class="nc">Tea</span><span class="p">(</span><span class="n">Drink</span><span class="p">):</span> |
| 647 | + <span class="k">def</span> <span class="nf">consume</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
| 648 | + <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Drinking </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> tea..."</span><span class="p">)</span> |
640 | 649 |
|
641 |
| - <span class="nd">@abstractmethod</span> |
642 |
| - <span class="k">def</span> <span class="nf">make_sound</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
643 |
| - <span class="k">pass</span> |
644 | 650 |
|
645 |
| -<span class="k">class</span> <span class="nc">Dog</span><span class="p">(</span><span class="n">Animal</span><span class="p">):</span> |
646 |
| - <span class="k">def</span> <span class="nf">make_sound</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
647 |
| - <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">'</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s1"> says: Woof'</span><span class="p">)</span> |
| 651 | +<span class="k">class</span> <span class="nc">Smoothie</span><span class="p">(</span><span class="n">Drink</span><span class="p">):</span> |
| 652 | + <span class="k">def</span> <span class="nf">consume</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
| 653 | + <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Drinking </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> smoothie..."</span><span class="p">)</span> |
648 | 654 |
|
649 |
| -<span class="k">class</span> <span class="nc">Cat</span><span class="p">(</span><span class="n">Animal</span><span class="p">):</span> |
650 |
| - <span class="k">def</span> <span class="nf">make_sound</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |
651 |
| - <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">'</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s1"> says: Meows'</span><span class="p">)</span> |
652 | 655 |
|
653 |
| -<span class="n">Dog</span><span class="p">(</span><span class="s1">'Pepper'</span><span class="p">)</span><span class="o">.</span><span class="n">make_sound</span><span class="p">()</span> |
654 |
| -<span class="n">Cat</span><span class="p">(</span><span class="s1">'Bella'</span><span class="p">)</span><span class="o">.</span><span class="n">make_sound</span><span class="p">()</span> |
| 656 | +<span class="n">Tea</span><span class="p">(</span><span class="s2">"English Breakfast"</span><span class="p">,</span> <span class="mi">250</span><span class="p">)</span><span class="o">.</span><span class="n">consume</span><span class="p">()</span> |
| 657 | +<span class="n">Smoothie</span><span class="p">(</span><span class="s2">"Tropical Blast"</span><span class="p">,</span> <span class="mi">500</span><span class="p">)</span><span class="o">.</span><span class="n">consume</span><span class="p">()</span> |
655 | 658 | </pre></div>
|
656 | 659 | </div>
|
657 | 660 | </div>
|
658 | 661 | <div class="cell_output docutils container">
|
659 |
| -<div class="output stream highlight-myst-ansi notranslate"><div class="highlight"><pre><span></span>Pepper says: Woof |
660 |
| -Bella says: Meows |
| 662 | +<div class="output stream highlight-myst-ansi notranslate"><div class="highlight"><pre><span></span>Drinking English Breakfast tea... |
| 663 | +Drinking Tropical Blast smoothie... |
661 | 664 | </pre></div>
|
662 | 665 | </div>
|
663 | 666 | </div>
|
|
0 commit comments