Python 3ベース:08_02_オブジェクト向けプログラミング(OOP)——クラスとオブジェクト


0.はじめに
このブログでは、クラスとオブジェクトの理解、クラスとオブジェクトの関係、クラスとオブジェクトの作成など、Pythonのオブジェクト向け開発におけるクラスとオブジェクトの概念について説明します.
パッケージ概念の理解を深める:01_Python 3におけるパッケージの認識
1.クラスとオブジェクトの概念
1.1クラスと対象の概念  クラス(Class)は、同じ特徴や行為を持つものの総称であり、特徴を属性と呼び、行為を方法と呼ぶ.クラスは抽象的で、直接使用できません.  オブジェクト:クラスによって作成された特定の存在であり、どのクラスによって作成されたオブジェクトが、どのクラスで定義された属性と方法を持っているかを直接使用することができます.
1.2クラスとオブジェクトの関係
  • 1.クラスはテンプレートであり、オブジェクトはクラスというテンプレートに基づいて作成される.
  • 2.プログラム開発では、まずクラスがあり、対象があるべきである.
  • 3.クラスは1つしかありません.オブジェクトは多く、異なるオブジェクト間で異なる属性を持つことができます.
  • 4.クラスで定義されている属性とメソッドは、オブジェクトがこれらの属性とメソッドを持つこともできます.

  •  類は飛行機を製造する際の図面に相当し、テンプレートであり、オブジェクトの作成を担当する.対象は図面で作られた飛行機に相当し、具体的なものです.
    1.3クラスの設計を行う前に、まず抽象分析プログラムがどのクラスを含む必要があるかを抽象分析し、名詞抽出法でクラス名を抽象化し、クラスにどのような属性と方法が含まれるべきかを分析する.プログラム開発では3つの点を考慮する必要があります.
  • 類名:このようなものの名前は、アルパカの命名法を適用します.
  • ②属性:このようなものがどのような特徴を持っているか.
  • ③方法:このようなものがどのような行為を持っているか.
  • 類名の確定:名詞抽出法は、一つの事物を概括できる名詞である.動物、植物など.
  • 属性の決定:人間の名前、年齢、性別など、オブジェクトの特徴の記述.
  • 方法の決定:対象が持つ行為(動詞)、例えば人が話せる、食事、寝るなどの行為.

  • 最初の例を見てください.
    1.cainは今年18歳で、身長は175で、ランニングが好きです.2.Caryは今年17歳で、身長172で、本を読むのが好きです.
    抽象分析:類--人類属性--名前、年齢、身長方法--ランニング、読書プログラムは以下の通りである.
    #     
    #     
    class Person:
        #     
        def __init__(self, new_name, new_age, new_height):
            self.name = new_name
            self.height = new_height
            self.age = new_age
            print("  %s,  %d ,   :%d" % (self.name, self.age, self.height))
        #     
    
        def run(self):
            print("    !")
    
        def read(self):
            print("    !")
    
    
    #   Cain  
    Cain = Person('Cain', 18, 175)
    Cain.run()
    #   Cary  
    Cary = Person('Cary', 17, 172)
    Cary.read()
    

    運行結果:Cainと申します.今年18歳です.身長は175です.走るのが好きです.私はCaryと申します.今年17歳です.身長は:172本が好きです.
    注意:
  • フォーマットの要件:クラスと関数体と同様に、他のコードと2行の間隔が必要であり、各メソッドの間にも1行の間隔があり、Python言語の特色を体現しなければならない.
  • プログラム分析:このプログラムはまず人間の「Person」を作成し、このクラスでは「名前」、「年齢」、「身長」などの3つの属性と「走る」、「本を読む」などの2つの方法を作成した.後に2つの「人」オブジェクト「Cain」と「Cary」が作成され、オブジェクトを作成するときに対応する3つのプロパティを入力する必要があります.作成したオブジェクトはクラスのメソッドを呼び出すことができます.以上のCainオブジェクト呼び出しの方法はランニングであり、Cary呼び出しの方法は読書であり、もちろんCainも読書を呼び出すことができ、Caryも同様にランニングすることができる.このプロセスは関数呼び出し、モジュール呼び出しのプロセスに似ていて、道理は通じています.このプログラムは読めなくても大丈夫です.後のステップ解析を見てください.

  • 2.組み込み関数メソッド
    いくつかの一般的なクラスの組み込み方法を紹介します
    メソッド名
    さぎょう
    __new__
    オブジェクトの作成時に自動的に呼び出されます
    __init__
    オブジェクトが初期化されると自動的に呼び出されます
    __del__
    オブジェクトがメモリから破棄される前に、自動的に呼び出されます.
    __str__
    オブジェクトの記述情報を返し、print関数出力で使用
    dir()メソッドを使用して、オブジェクトに組み込まれている関数メソッドを表示できます.id()メソッドでオブジェクトのストレージアドレスを表示できます.
    2.1オブジェクト属性の初期化方法_init__
    ≪バックグラウンドの使用|Use Background|oem_src≫:クラス名を使用してオブジェクトを作成すると、次の操作が自動的に実行されます.
  • 1.オブジェクトのメモリへのスペースの割り当て–オブジェクト
  • を作成
  • 2.オブジェクトの属性に初期値を設定する–初期化方法_init__

  • 適用の説明:
  • オブジェクトの属性初期化は、クラスの内部で行うこともできるし、クラスの外部で行うこともできる(推奨せずバグあり)
  • .
  • __init__メソッドは、クラスにどのような属性とメソッドがあるかを定義するために使用されます.呼び出す必要がなく、初期化メソッドが自動的に呼び出されます.
  • 在_init__メソッド内でself.属性名=属性の初期値を使用して初期属性を定義し、属性を定義した後、このクラスで作成したオブジェクトにその属性があります.

  • 例を見てみましょう
    class Person:
    
        def __init__(self):
        	# self.    =       
            self.name = 'Cain'
            print("  %s" % self.name)
    
    
    #   Cain  
    Cain = Person()
    Cary = Person()
    
    

    運転結果:Cainと申しますCainと申します
    注意:クラスの内部の初期化方法では、Person()クラスで作成されたオブジェクトにこの初期属性が設定されています.
      上の初期値は固定されており,実際に開発する際には需要に応じて属性を伝達するので,初期化方法ではパラメータを設定して初期値を伝達すべきである.
    改善コードは次のとおりです.
    #     
    class Person:
    
        def __init__(self,name):
            self.name = name
            print("  %s" % self.name)
    
    
    #   Cain  
    Cain = Person('Cain')
    Cary = Person('Cary')
    
    

    運転結果:Cainと申しますCaryと申します
    説明:構造関数と同様に、実際のパラメータの代わりにパラメータを使用して、コードをより柔軟にする必要があります.以上のコードは、_init__メソッドのパラメータリストにはnameというパラメータが追加され、付与文self.name=nameで入力されたパラメータを初期化属性nameに付与されます.このように、クラスの初期属性はオブジェクトの作成時に入力されたパラメータです.このように、1つのクラスに複数の属性がある場合、オブジェクトを作成する際にも、複数の属性が入力され、属性と属性の間にカンマで区切られます.
    2.2__del__方法
    使用背景:オブジェクトがメモリ内で破棄される前に、自動的に__が呼び出されます.del__オブジェクトのライフサイクルを破棄する方法:
  • オブジェクトを作成し、ライフサイクルは
  • から開始します.
  • ライフサイクルでは、オブジェクトのプロパティにアクセスしたり、オブジェクトにメソッド
  • を呼び出すことができます.
  • 呼び出し_del__方法、ライフサイクル終了
  • 例を見てみましょう
    class Person:
    
        def __init__(self,name):
            self.name = name
            print("  %s,   !" % self.name)
    
        def __del__(self):
            print("  %s,   !" % self.name)
    
    
    #   Cain  
    Cain = Person('Cain')
    print('-' * 50)
    
    

    運行結果:Cainと申しますが、来ました!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Cainと申します.行ってきます.
    注:  以上のプログラムから分かるように、解釈器はすべてのプログラムを完了すると自動的に__を呼び出す.del__関数はオブジェクトをメモリからカチッと落とすのでprint()文を実行してから実行します_del__()メソッド.例を挙げると、出かける前にメーターを整理したり、衛生的なことや他のことを料理したりしなければなりません.すべてが終わったら、家を出てドアを閉めなければなりません.この過程で、あなたが家にいる間にした一連の動作は、コードが正常に動作していることに相当し、あなたが外に出たとき、プログラムが終わっても、このとき実行されます.del__ドアを閉める方法.私は強引に例を挙げたような気がします.ははは、これは重要ではありません.重要なのはこの過程を理解することです.オブジェクトが消える前に、解釈が自動的に呼び出されます.del__関数は、オブジェクトが占めるスペースを解放します.オブジェクトが消える間に何かをしたい場合は、_del__メソッドにこれらのやるべきことを追加します.例えば、上のプログラムは、離れたときに私が行ってしまったと言っています.
    もう1つのケースはdelメソッドでオブジェクトを直接削除することです.このクラスの_del__メソッドは事前に実行され、上のコードを修正して効果を見ます.
    #     
    class Person:
    
        def __init__(self,name):
            self.name = name
            print("  %s,   !" % self.name)
    
        def __del__(self):
            print("  %s,   !" % self.name)
    
    
    #   Cain  
    Cain = Person('Cain')
    del Cain
    print('-' * 50)
    
    

    運行結果:Cainと申します.来ました.Cainと申しますが、行ってきます!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    説明:delオブジェクトのライフサイクルが事前に終了し、オブジェクトのメモリが事前に解放されたため、クラスの_del__メソッドも事前に実行されていますが、この例では_del__方法の理解はさらに深まっただろう.
    2.3__str__方法
    使用背景:str__この方法ですが、注意が必要なのは_str__メソッドの返却値は文字列でなければなりません.理解しにくい場合は、例を見てみましょう.
    class Person:
    
        def __init__(self, name):
            self.name = name
        """ 
        def __str__(self):
            return ("      :%s   " % self.name)
        """
    
    #   Cain  
    Cain = Person('Cain')
    print(Cain)
    
    

    複数行コメントを付けた実行結果:<_main__.person object=""at=""/>
    実行結果をコメントしない:私はCainという人間です.
    説明:  不要_str__メソッドは直接print()でオブジェクトを印刷すると、オブジェクトの格納アドレスが出力されます.str__方法ではprint()でオブジェクトを印刷した結果、カスタム文字列になります.
    時間:2019年5月2日21:43:10