Python OOP

I. What is Python OOP?

OOP = Object Oriented Programming.

  • Python fully supports OOP with Class and Class Inheritance. A Python class is a blueprint for creating from 1 to many objects. It can have:
  • Attributes are attached to it to maintain its state. They may be read-only or writeable.
  • Methods to modify its state. Syntax to define a class name “Animal”:
<span>class</span> <span>Animal</span><span>:</span>
<span>def</span> <span>__init__</span><span>(</span><span>self</span><span>,</span> <span>secret_attribute</span><span>=</span><span>"</span><span>Suyt</span><span>"</span><span>):</span>
<span># __init__: constructor that runs when an object is created. </span> <span># self: refers to the current instance of the class </span> <span>self</span><span>.</span><span>num_eyes</span> <span>=</span> <span>2</span>
<span>self</span><span>.</span><span>__secret_attribute</span> <span>=</span> <span>secret_attribute</span> <span># Private variable </span>
<span>def</span> <span>breathe</span><span>(</span><span>self</span><span>):</span>
<span>print</span><span>(</span><span>"</span><span>Inhale, exhale.</span><span>"</span><span>)</span>
<span>def</span> <span>get_secret_attribute</span><span>(</span><span>self</span><span>):</span>
<span>return</span> <span>self</span><span>.</span><span>__secret_attribute</span>
<span>def</span> <span>make_sound</span><span>(</span><span>self</span><span>):</span>
<span>pass</span> <span># To be implemented by subclasses </span>
<span>class</span> <span>Animal</span><span>:</span>
    <span>def</span> <span>__init__</span><span>(</span><span>self</span><span>,</span> <span>secret_attribute</span><span>=</span><span>"</span><span>Suyt</span><span>"</span><span>):</span>
        <span># __init__: constructor that runs when an object is created. </span>        <span># self: refers to the current instance of the class </span>        <span>self</span><span>.</span><span>num_eyes</span> <span>=</span> <span>2</span>
        <span>self</span><span>.</span><span>__secret_attribute</span> <span>=</span> <span>secret_attribute</span> <span># Private variable </span>
    <span>def</span> <span>breathe</span><span>(</span><span>self</span><span>):</span>
        <span>print</span><span>(</span><span>"</span><span>Inhale, exhale.</span><span>"</span><span>)</span>

    <span>def</span> <span>get_secret_attribute</span><span>(</span><span>self</span><span>):</span>
        <span>return</span> <span>self</span><span>.</span><span>__secret_attribute</span>

    <span>def</span> <span>make_sound</span><span>(</span><span>self</span><span>):</span>
        <span>pass</span>  <span># To be implemented by subclasses </span>
class Animal: def __init__(self, secret_attribute="Suyt"): # __init__: constructor that runs when an object is created. # self: refers to the current instance of the class self.num_eyes = 2 self.__secret_attribute = secret_attribute # Private variable def breathe(self): print("Inhale, exhale.") def get_secret_attribute(self): return self.__secret_attribute def make_sound(self): pass # To be implemented by subclasses

Enter fullscreen mode Exit fullscreen mode

II. What are the core concepts or elements of OOPs?

  • Class: a blueprint for creating objects class Animal
  • Object: an instance of a class. Instantiation is an action that creates an instance from the class nemo_fish = Fish().
  • Encapsulation: restricted direct access to attributes or from the outside self.__secret_attribute

  • Inheritance: Allows a child class to use methods and properties from parents’ classes.

<span>class</span> <span>Fish</span><span>(</span><span>Animal</span><span>):</span>
<span>"""</span><span>Fish class is an inheritance from Animal</span><span>"""</span>
<span>def</span> <span>__init__</span><span>(</span><span>self</span><span>):</span>
<span>super</span><span>().</span><span>__init__</span><span>()</span> <span># call Animal init </span>
<span>def</span> <span>breathe</span><span>(</span><span>self</span><span>):</span>
<span>super</span><span>().</span><span>breathe</span><span>()</span> <span>#call the Animal breathe function, then modify it. </span> <span>print</span><span>(</span><span>"</span><span>doing this underwater.</span><span>"</span><span>)</span>
<span>def</span> <span>swim</span><span>(</span><span>self</span><span>):</span>
<span>print</span><span>(</span><span>"</span><span>moving in the water</span><span>"</span><span>)</span>
<span>class</span> <span>Fish</span><span>(</span><span>Animal</span><span>):</span>
    <span>"""</span><span>Fish class is an inheritance from Animal</span><span>"""</span>
    <span>def</span> <span>__init__</span><span>(</span><span>self</span><span>):</span>
        <span>super</span><span>().</span><span>__init__</span><span>()</span> <span># call Animal init </span>
    <span>def</span> <span>breathe</span><span>(</span><span>self</span><span>):</span>
        <span>super</span><span>().</span><span>breathe</span><span>()</span> <span>#call the Animal breathe function, then modify it. </span>        <span>print</span><span>(</span><span>"</span><span>doing this underwater.</span><span>"</span><span>)</span>

    <span>def</span> <span>swim</span><span>(</span><span>self</span><span>):</span>
        <span>print</span><span>(</span><span>"</span><span>moving in the water</span><span>"</span><span>)</span>
class Fish(Animal): """Fish class is an inheritance from Animal""" def __init__(self): super().__init__() # call Animal init def breathe(self): super().breathe() #call the Animal breathe function, then modify it. print("doing this underwater.") def swim(self): print("moving in the water")

Enter fullscreen mode Exit fullscreen mode

  • Polymorphism: allows different classes to use the same method name but different implementations.
<span>class</span> <span>Dog</span><span>(</span><span>Animal</span><span>):</span>
<span>def</span> <span>make_sound</span><span>(</span><span>self</span><span>):</span>
<span>return</span> <span>"</span><span>Woof!</span><span>"</span>
<span>class</span> <span>Cat</span><span>(</span><span>Animal</span><span>):</span>
<span>def</span> <span>make_sound</span><span>(</span><span>self</span><span>):</span>
<span>return</span> <span>"</span><span>Meow!</span><span>"</span>
<span>animals</span> <span>=</span> <span>[</span><span>Dog</span><span>(),</span> <span>Cat</span><span>()]</span>
<span>for</span> <span>animal</span> <span>in</span> <span>animals</span><span>:</span>
<span>print</span><span>(</span><span>animal</span><span>.</span><span>make_sound</span><span>())</span> <span># Calls the correct method based on the object type </span>
<span>class</span> <span>Dog</span><span>(</span><span>Animal</span><span>):</span>
    <span>def</span> <span>make_sound</span><span>(</span><span>self</span><span>):</span>
        <span>return</span> <span>"</span><span>Woof!</span><span>"</span>

<span>class</span> <span>Cat</span><span>(</span><span>Animal</span><span>):</span>
    <span>def</span> <span>make_sound</span><span>(</span><span>self</span><span>):</span>
        <span>return</span> <span>"</span><span>Meow!</span><span>"</span>

<span>animals</span> <span>=</span> <span>[</span><span>Dog</span><span>(),</span> <span>Cat</span><span>()]</span>
<span>for</span> <span>animal</span> <span>in</span> <span>animals</span><span>:</span>
    <span>print</span><span>(</span><span>animal</span><span>.</span><span>make_sound</span><span>())</span>  <span># Calls the correct method based on the object type </span>
class Dog(Animal): def make_sound(self): return "Woof!" class Cat(Animal): def make_sound(self): return "Meow!" animals = [Dog(), Cat()] for animal in animals: print(animal.make_sound()) # Calls the correct method based on the object type

Enter fullscreen mode Exit fullscreen mode

  • Abstraction: hiding implementation details and only exposing essential functionalities. For example: we have many 2 kinds of animals: cats, dogs, and fish. We know they care how they make the sound, only care that they can make a sound.
<span>from</span> <span>abc</span> <span>import</span> <span>ABC</span><span>,</span> <span>abstractmethod</span> <span># import abstract base class module </span>
<span>class</span> <span>Animal</span><span>(</span><span>ABC</span><span>):</span>
<span>@abstractmethod</span>
<span>def</span> <span>make_sound</span><span>(</span><span>self</span><span>):</span>
<span>pass</span>
<span># Getting error if instantiate an abstract class # dog = Animal() # TypeError: Can't instantiate abstract class Animal # without an implementation for abstract method 'make_sound' </span>
<span># Dog class inherits from Animal so it has to implement method make_sound </span><span>class</span> <span>Dog</span><span>(</span><span>Animal</span><span>):</span>
<span>def</span> <span>make_sound</span><span>(</span><span>self</span><span>):</span>
<span>return</span> <span>"</span><span>Woof! Woof!</span><span>"</span>
<span>perfect_dog</span> <span>=</span> <span>Dog</span><span>()</span>
<span>print</span><span>(</span><span>perfect_dog</span><span>.</span><span>make_sound</span><span>())</span>
<span># Woof! Woof! </span>
<span>from</span> <span>abc</span> <span>import</span> <span>ABC</span><span>,</span> <span>abstractmethod</span> <span># import abstract base class module </span>
<span>class</span> <span>Animal</span><span>(</span><span>ABC</span><span>):</span>
    <span>@abstractmethod</span>
    <span>def</span> <span>make_sound</span><span>(</span><span>self</span><span>):</span>
        <span>pass</span>

<span># Getting error if instantiate an abstract class # dog = Animal() # TypeError: Can't instantiate abstract class Animal # without an implementation for abstract method 'make_sound' </span>
<span># Dog class inherits from Animal so it has to implement method make_sound </span><span>class</span> <span>Dog</span><span>(</span><span>Animal</span><span>):</span>
    <span>def</span> <span>make_sound</span><span>(</span><span>self</span><span>):</span>
        <span>return</span> <span>"</span><span>Woof! Woof!</span><span>"</span>

<span>perfect_dog</span> <span>=</span> <span>Dog</span><span>()</span>
<span>print</span><span>(</span><span>perfect_dog</span><span>.</span><span>make_sound</span><span>())</span>
<span># Woof! Woof! </span>
from abc import ABC, abstractmethod # import abstract base class module class Animal(ABC): @abstractmethod def make_sound(self): pass # Getting error if instantiate an abstract class # dog = Animal() # TypeError: Can't instantiate abstract class Animal # without an implementation for abstract method 'make_sound' # Dog class inherits from Animal so it has to implement method make_sound class Dog(Animal): def make_sound(self): return "Woof! Woof!" perfect_dog = Dog() print(perfect_dog.make_sound()) # Woof! Woof!

Enter fullscreen mode Exit fullscreen mode

原文链接:Python OOP

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
When you procrastinate, you become a slave to yesterday.
拖延会让你成为昨天的奴隶
评论 抢沙发

请登录后发表评论

    暂无评论内容