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
暂无评论内容