pythonオブジェクト向けプログラミング(OOP)

3196 ワード

オブジェクト向けプログラミングは、「オブジェクト」を使用して実現するプログラミング方式です.万物は対象である.
オブジェクトの特徴:1.世の中の万物はすべて対象2.各オブジェクトは一意です.オブジェクトには属性と動作がある(オブジェクトの動作には機能と具体的な実装が含まれる).オブジェクトにステータス5がある.オブジェクトはクラスオブジェクトとインスタンスオブジェクトの2つの大きなクラスに分けられます(クラスオブジェクトは同じ属性とインスタンスオブジェクトを持つ抽象であり、クラスオブジェクトはインスタンスオブジェクトのテンプレートであり、インスタンスオブジェクトはクラスオブジェクトによって作成されます)オブジェクト向けプログラミングの一般的なステップ
1.クラスオブジェクトを抽象化する.クラスオブジェクトの属性3を抽象化する.クラスオブジェクトを抽象化する動作4.クラスオブジェクトからインスタンスオブジェクト5を作成する.インスタンス・オブジェクトからのプロパティとメソッドへのアクセス
class Cat(object):
    pass
    class   (object):
   #            ,       

初識類の方法
#  (  )        
#    
class Cat(object):
    def _init_(self, breed, name, age, health):
        self.breed = breed
        self.name = name
        self.age = age
        self.health = health
    def run(self):
        print("Cat is running")
    def miao(self):
        print("Cat is miaoing")
    def eat(self):
        print("Cat is eatting")

#           
cat = Cat("   ","  ",1,"   ")
print(cat.breed)
print(cat.name)
print(cat.age)
print(cat.health)
cat.run()
cat.miao()
cat.eat()

**インスタンス属性:**インスタンスオブジェクトにバインドされた属性バインド方法には、次の2つがあります.
1.クラスオブジェクトの内部:self.属性名=属性値2.オブジェクトの外部:インスタンスオブジェクト.属性名=属性値
class MyClass(object):
    def _init_(self):
        #             
        self.ia1 = 18
        
    def do_sth1(self):
        #             
        print(self.ia1)
        
    def do_sth2(self):
        print(self.ia2)
        
    def do_another(self):
        #             
        self.ia2 = 56
        
    def do_sth3(self):
        print(self.ia3)
    
    def do_sth3(self):
        print(self.ia3)

インスタンスオブジェクトdictは、インスタンスオブジェクトにバインドされているすべてのプロパティと辞書に値するものを取得します.
**クラス属性:**クラスオブジェクトにバインドされた属性がクラス属性をバインドする方法は2つあります.
1.クラスオブジェクトの内部(法外):属性名=属性値2.クラスオブジェクトの外部にあるクラスオブジェクト.属性名=属性値
class MyClass(object):
    #      (   )     
     cal = 66
    def do_sth(self):
        #      (   )     
        print(MyClass.cal)

クラスの独自の方法:init:コンストラクション関数、オブジェクトの生成時にdel:コンストラクション関数、オブジェクトの解放時にrepr:印刷、setitemの変換:インデックスによるgetitem:インデックスによる値取得len:長さcmpの取得:比較演算call:関数呼び出しadd:加算sub:減算mul:乗算truediv:除算mod:余剰演算pow:乗方
オブジェクト向けの一般的な用語
抽象/実装抽象とは、現実世界の問題とエンティティの本質的な表現、行為と特徴をモデリングし、関連するサブセットを構築し、プログラム構造を描画し、このモデルを実現するために使用することができる.抽象には、このモデルのデータ属性だけでなく、これらのデータのインタフェースも定義されます.
パッケージ/インタフェースパッケージは、データ/情報を非表示にする観念を記述し、データ属性にインタフェースとアクセス関数を提供する.プログラマがこれらの操作を許可しない限り、任意のクライアントが直接データにアクセスし、インタフェースを無視することは、パッケージ性とは逆です.(注意:対外透明とは、外部呼び出し者が自分の望む機能をスムーズに手に入れ、内部の細部の存在を全く意識しないことを意味する)
合成合成はクラスに対する記述を拡張し,複数の異なるクラスが一つの大きなクラスに結合し,現実問題を解決する.合成は、クラスが他のクラスから構成されるなど、非常に複雑なシステムを記述し、より小さなコンポーネントが他のクラス、データ属性、および動作である可能性があり、これらはすべて結合され、互いに「1つの」関係である.
派生/継承/継承構造派生は、保管されているクラスタイプのすべての必要なデータと動作を保持するサブクラス派生の新しい特性を記述しますが、変更または他のカスタム操作を許可しても、元のクラスの定義は変更されません.
汎化/特化汎化は、すべての子クラスが親クラスおよび祖先クラスと同じ特徴を持つことを示す.すべてのサブクラスのカスタマイズ、すなわち、祖先クラスと異なるプロパティを特化して説明します.
多態と多態性多態は同じ事物の多種の状態を指す:水という事物には多種の異なる状態がある:氷、水蒸気.多態性の概念は,特定のクラスを考慮することなく,オブジェクトが共通の属性と動作によってどのように操作およびアクセスするかを指摘している.
自省/反射自省は反射とも呼ばれ,あるオブジェクトがどのように運転期間中に自分の情報を取得するかを示す性質である.オブジェクトを渡すと、どのような能力があるかを調べることができます.これは強力な特性です.