Python初探のオブジェクト向けプログラミング

19134 ワード

概要
多くの人がPythonに触れるのは、爬虫類から始まりますが、実は多くの言語で爬虫類を作ることができますが、Pythonは他の言語に比べて、もっと簡単です.しかしPythonは爬虫類だけでなく、人工知能、科学計算などの応用が広がっている.昔の人の雲:万丈のビルは平地から、長足の発展があるためには、基礎を築くことが重要です.本文は主にPythonの対象に関する知識を説明し、学習と共有のために使用します.不足点があれば、指摘してください.
オブジェクト向けフィーチャー
  • クラス:同じものの特徴を記述するための集合.例えば、Personクラスは、人間を表し、人間の属性と特徴を有する.
  • オブジェクト:クラスによって定義された特定のインスタンス、例えばzhangsanは特定の人を表す.
  • 継承:生クラス継承ベースクラスを割り当てる方法と属性であり、例えば、ManはPersonのサブクラスである.
  • パッケージ:データを非表示にし、詳細を実装し、外部アクセス方法を提供します.
  • マルチステート:1つのベースクラス、複数の派生クラス、異なる形態を持つことができます.
  • 抽象:詳細を捨てて、本質的な特徴の過程だけに注目する.

  • 以上がオブジェクト向けの基本的な特徴ですが、Pythonはオブジェクト向けにどのようにしているのでしょうか.
    クラスの作成
     
    次のようになります.
  • class文を使用して新しいクラスを作成します.classの後はクラスの名前でコロンで終わります.
  • Pythonのクラスは,クラスの内容範囲を括弧で表すのではなく,インデントによって実現される.
  • クラスのメンバーメソッドと一般的なメソッドの違いは、メソッド定義の最初のパラメータがselfであり、クラスのインスタンスを表すが、呼び出し時には必要ないことである.
  • 中_init__メソッドはクラスの初期化メソッドで、オブジェクトを宣言すると対応するメソッドが呼び出されます.
  • 中_del__メソッドは、クラスが解放されたときに呼び出される構造関数です.
  •  1 class Employee:
     2     """   """
     3     emp_count = 0  #
     4 
     5     def __init__(self, name, salary):
     6         """   """
     7         self.name = name
     8         self.salary = salary
     9         Employee.emp_count += 1
    10 
    11     def display_count(self):
    12         """    """
    13         print('Total Employee =', Employee.emp_count)
    14 
    15     def display_employee(self):
    16         """    """
    17         print('name =', self.name, ', salary = ', self.salary)
    18 
    19     def prt(self):
    20         """    """
    21         print(self)
    22         print(self.__class__)
    23 
    24     def __del__(self):
    25         """    """
    26         print(self, '    ')

    オブジェクトの作成
    Pythonはオブジェクトを作成し、newキーワードを必要とせず、関数の呼び出しとJavaおよび.Netが違います.次のようになります.
    1 '       '
    2 emp = Employee('Jack', 20)
    3 emp.display_count()
    4 emp.display_employee()
    5 emp.prt()

    オブジェクト属性の動的追加と削除
    オブジェクトのプロパティは、コンパイル言語とは異なり、動的に追加できます.
    1 emp.age = 17  #      'age'   
    2 emp.age = 28  #    'age'   
    3 del emp.age  #    'age'   

    以下に示すように、Pythonの組み込み方法で属性を追加および取得することもできます.
    1 print(getattr(emp, 'name'))  #     
    2 print(hasattr(emp, 'age'))  #       
    3 setattr(emp, 'age', 18)  #       
    4 print(hasattr(emp, 'age'))  #       
    5 print(getattr(emp, 'age'))  #     
    6 delattr(emp, 'age')  #     
    7 print(hasattr(emp, 'age'))  #       

    Pythonには、以下のようにクラスを内蔵する属性もあります.
    1 #     
    2 print("Employee.__doc__:", Employee.__doc__)
    3 print("Employee.__name__:", Employee.__name__)
    4 print("Employee.__module__:", Employee.__module__)
    5 print("Employee.__bases__:", Employee.__bases__)
    6 print("Employee.__dict__:", Employee.__dict__)

    クラスのプロパティとメソッド
  • クラスのプライベート属性は、二重下線で始まり、クラス内でselfでのみアクセスできます.
  • クラスのprotectedプロパティは、下線で始まり、サブクラスと自己呼び出しのみが許可されます.
  • クラスの内部でdefキーワードを使用してクラスにメソッドを定義することができ、一般的な関数定義とは異なり、クラスメソッドにはパラメータselfが含まれ、最初のパラメータ
  • である必要がある.
  • クラスのプライベートメソッド:2つの下線で始まり、このメソッドをプライベートメソッドと宣言し、クラスの外部で呼び出すことはできません.クラスの内部呼び出しself._private_methods

  • 次のようになります.
    1 class JustCounter:
    2     """   """
    3     __secretCount = 0  #       
    4     publicCount = 0  #     
    5 
    6     def count(self):
    7         self.__secretCount += 1
    8         self.publicCount += 1
    9         print('', self.__secretCount)

    Pythonではインスタンス化されたクラスはプライベートデータにアクセスできませんが、object._を使用できます.className__attrName(オブジェクト名._クラス名__プライベート属性名)は、次のように属性にアクセスします.
    1 print(counter._JustCounter__secretCount)

     
    クラスの継承
    オブジェクト向けのプログラミングがもたらす主な利点の1つはコードの再利用であり,この再利用を実現する方法の1つは継承メカニズムによるものである.継承によって作成された新しいクラスをサブクラスまたは派生クラス、継承されたクラスをベースクラス、親クラス、またはスーパークラスと呼びます.
  • Pythonでの継承はclassサブクラス名(親クラス名):のフォーマットで実現されます.
  • 子クラスは、親クラスのメソッドを呼び出し、独自のメソッドを定義することができる.
  • 親メソッドの機能が要件を満たすことができない場合、サブクラスは親メソッドを書き換えることができます.

  • 次のように、Parentは親を表し、独自の属性とメソッドを持ちます.
     1 class Parent:
     2     """    """
     3     parentAttr = 100
     4 
     5     def __init__(self):
     6         print('         ')
     7 
     8     def parentMethod(self):
     9         print('      ')
    10 
    11     def setAttr(self, attr):
    12         Parent.parentAttr = attr
    13 
    14     def getAttr(self):
    15         print('    :', Parent.parentAttr)
    16 
    17     def myMethod(self):
    18         print('     MyMethod')

    Childは、次のように、Parentから継承されるサブクラスを表します.
     1 class Child(Parent):
     2     """    """
     3 
     4     def __init__(self):
     5         print('         ')
     6 
     7     def childMethod(self):
     8         print('      ')
     9 
    10     def myMethod(self):
    11         """  Overrides    """
    12         print('     MyMethod')
    13 
    14     def __str__(self):
    15         """"""
    16         return 'str    '

    サブクラスのインスタンス化
    次のようになります.
    1 c = Child()  #        
    2 c.childMethod()  #       
    3 c.parentMethod()  #       
    4 c.setAttr(200)  #
    5 c.getAttr()  #              
    6 c.myMethod()  #        MyMethod

     
    以下に示すように、組み込み関数によって、サブクラスとクラスの関係を判断できます.
    1 print(issubclass(Child, Parent))  #             
    2 print(isinstance(c, Child))  #          
    3 print(isinstance(c, Parent))  #          

     
    コメント
    天浄沙・秋思
    著者:馬致遠
    枯れた藤の老木はカラスがぼんやりしていて、小橋の流水の家、古道の西風のやせた馬.夕日が西に沈むと,断腸者は天涯にいる.