プログラミング-運動20 b - OOP概念


Read the code - relax, that is all there is to it - coding



OOP概念
いくつかの概念はすべてのOO言語でOOPを通して実行されます:
  • クラス
  • 遺産
  • 多型
  • 抽象化
  • カプセル化
  • We shall only consider the creation of classes, inheritance and polymorphism.



    ノート
    これらのOOP概念はすべてのオブジェクト指向プログラミング言語を通してカットされます、しかし、実装は全く異なります.

    遺産
    継承は、2つ目のクラスに対して再度、プロパティとメソッドを再度書き直すことなく、別のクラスのオブジェクト(オブジェクトの)属性とメソッドを複製/拡張/継承/変更することを可能にします.現在生産されているいくつかのアイテム/製品について考えてください.あなたは、オリジナルの異なるバージョンがあることに気付きます.したがって、バージョン1、2、3などがあると言います.バージョン2、3、および他はどうやって来ましたか?同社はV 1を開発し、後にV 2を始めた?またはV 2でV 2を得るためにV 2を得るためにV 1をむしろ改善しました.さて、これらの2つは実際に可能です、後者のアプローチは解決です.V 2を得るためにV 1のように改善されている後者のアプローチは最高に働き、リソースを節約する.
    V 1はV 2に成長します、そして、それは遺産か何かです.

    相続の構造
    私たちには2つのクラスがあり、これらの2つのクラスのうちの1つは他のクラスの属性と方法を使用したいと思います.を作成しましょうAnimal classCat class , どこCat 継承するAnimal .
    class Animal:
        def __init__(self, name, color, age):
            self.name = name
            self.color = color
            self.age = age
    
    
    class Cat:
        pass
    
    
    つのクラス(子クラス)は、別のクラス(親クラス)から継承するために、関数の引数をコロンの前の括弧に渡すだけで、親クラスの名前を渡します.: 子クラスの
    class Parent:
        pass
    
    
    class Child(Parent):
        pass
    
    

    It is a very good practice to have the classes in separate files. This means that we can have the classes in the same file. When should we separate our classes into separate files?


    下のコードを見てみましょう.
    # sharing of common functionality using classes
    
    # Super (Parent) class
    class Animal:
        def __init__(self, name, color, age):
            self.name = name
            self.color = color
            self.age = age
    
    
    # Sub (Child) class of Animal
    class Cat(Animal):
        def purr(self):
            print("Purr..!!")
    
    
    # Another sub (Child) class of Animal
    class Dog(Animal):
        def bark(self):
            print("Woof..!!")
    
    
    # instances of the child classes
    will = Cat("Willington", "red", 5)
    will.purr()
    
    granny = Dog("Granny B", "green", 3)
    granny.bark()
    
    

    Remember to pass in self and reference methods and attributes with self



    複数の継承例
    # there are three class Human, Robot and Hybrid
    # Hybrid inherits from Human and Robot
    
    class Human:
    
        def __init__(self):
            print("I am a Human")
    
        def normal_wtt(self):
            print("I can behave like a human being")
    
    
    class Robot:
    
        def __init__(self):
            print("I am a Robot")
    
        def super_wtt(self):
            print("I can behave like a machine")
    
    
    class Hybrid(Human, Robot):
    
        def __init__(self):
            print("I am a Hybrid")
    
    
    h = Hybrid()
    
    h.normal_wtt()
    h.super_wtt()
    
    
    # output
    # I am a Hybrid
    # I can behave like a human being
    # I can behave like a machine
    
    
    The Hybrid クラスは、現在のアクセスHuman and Robot クラス.
    super() 機能
    使用するsuper() ベースクラスの元のメソッドにアクセスします.
    class Cat:
    
        def __init__(self, color, legs):
            self.color = color
            self.legs = legs
    
        def number_of_legs(self):
            return self.legs
    
        def color_of_obj(self):
            return self.color
    
        def run(self):
            print(f"I have {self.number_of_legs()} legs")
            print(f"I am {self.color_of_obj()} in complexion")
    
    
    class Tiger (Cat):
    
        def __init__(self, color, legs, is_big):
            # to have the same functionality as the base class
            # pass the color and legs data to the constructor of
            # the super class. In this way we can modify the
            # constructor method of the child class to match
            # the parent class
            super().__init__(color, legs)
    
            # this saves us from doing
            # self.color = color
            # self.legs = legs
            self.is_big = is_big
    
        def run(self):
            # call the original run methods of the base class
            super().run()
            print("I have enormous claws for sprinting")
    
    
    felix = Cat("yellow", 6)
    felix.run()
    
    tiger = Tiger("green", 5, True)
    tiger.run()
    
    

    多型
    多形の概念は、多くの形を持つことです.例を考えましょう.
    # parent class
    class Human:
        def __init__(self, name):
            self.name = name
    
        def say_hello(self):
            return f"Hello, {self.name}"
    
    
    だからクラスはHuman クラスには、こんにちはと言う方法がたくさんあります、そして、したがって、人は異なる人間のために異なる実装をしたいです.
    # child class - which extends Human
    class Engineer(Human):
    
        # say hello the engineers' way, so we override 
        # the say_hello method
        def say_hello(self):
            return f"Hello, {self.name}, I am an Engineer!!"
    
    

    continuation in exercise 20 c