概要
多くの人がPythonと接触し、クローラーから始めます。実際、多くの言語がクローラーになることができますが、Pythonは他の言語よりも単純です。しかし、Pythonはクローラーに限定されず、人工知能や科学コンピューティングでより広く使用されています。古代人はこう言っています。大きな進歩を遂げるには、しっかりとした基盤を築くことが重要です。この記事では、主に、学習と共有のみを目的としたPythonのオブジェクト指向の知識について説明します。欠点がある場合は、訂正してください。
オブジェクト指向の機能
クラス:同じことを説明するために使用される特性のコレクション。たとえば、次のようなものです。人を表し、人間の属性と特性を持つ人クラス。
オブジェクト:次のようなクラスによって定義された具体的なインスタンス:zhangsanは具体的な人物を表します。
継承:基本クラスのメソッドとプロパティを継承するクラスを割り当て、次のような独自のプロパティと特性を持ちます。ManはPersonのサブクラスです。
カプセル化:データと実装の詳細を非表示にし、外部アクセス方法を提供します。
多態性:基本クラスは複数の派生クラスを持つことができ、異なる形式を持つことができます。
抽象化:詳細を脇に置き、重要な機能のみに焦点を当てるプロセス。
上記はオブジェクト指向の基本的な特徴ですが、Pythonはオブジェクト指向でどのように機能しますか?
クラスを作成
次のように:
classEmployee:"""スタッフカテゴリー"""
emp_count =0 #変数はクラス変数であり、その値はこのクラスのすべてのインスタンス間で共有されます
def __init__(self, name, salary):"""初期化"""
self.name = name
self.salary = salary
Employee.emp_count +=1
def display_count(self):"""表示数量"""print('Total Employee =', Employee.emp_count)
def display_employee(self):"""情報を表示する"""print('name =', self.name,', salary = ', self.salary)
def prt(self):"""自分で印刷する"""print(self)print(self.__class__)
def __del__(self):"""デストラクタ"""print(self,'解放された')
オブジェクトを作成
Pythonは、Javaや.Netとは異なり、関数呼び出しに似たnewキーワードなしでオブジェクトを作成します。次のように:
' 最初のオブジェクトを作成します'
emp =Employee('Jack',20)
emp.display_count()
emp.display_employee()
emp.prt()
オブジェクトのプロパティを動的に追加および削除します
以下に示すように、オブジェクト属性は動的に追加できます。これは、コンパイルされた言語とは異なります。
emp.age =17 #1つ追加します'age'属性
emp.age =28 #変更する'age'属性
del emp.age #削除'age'属性
以下に示すように、Pythonの組み込みメソッドを使用して属性を追加および取得することもできます。
print(getattr(emp,'name')) #属性を取得する
print(hasattr(emp,'age')) #属性を含めるかどうか
setattr(emp,'age',18) #属性と値を設定する
print(hasattr(emp,'age')) #属性を含めるかどうか
print(getattr(emp,'age')) #属性を取得する
delattr(emp,'age') #属性を削除
print(hasattr(emp,'age')) #属性を含めるかどうか
以下に示すように、Pythonには組み込みクラスのいくつかの属性もあります。
# 組み込みオブジェクト
print("Employee.__doc__:", Employee.__doc__)print("Employee.__name__:", Employee.__name__)print("Employee.__module__:", Employee.__module__)print("Employee.__bases__:", Employee.__bases__)print("Employee.__dict__:", Employee.__dict__)
クラスの属性とメソッド
次のように:
classJustCounter:"""クラスの説明"""
__ secretCount =0 #クラスプライベート変数
publicCount =0 #パブリック変数
def count(self):
self.__secretCount +=1
self.publicCount +=1print('プライベート変数:', self.__secretCount)
Pythonでは、インスタンス化されたクラスがプライベートデータにアクセスすることは許可されていませんが、次に示すように、object._className__attrName(オブジェクト名._クラス名__プライベート属性名)を使用して属性にアクセスできます。
print(counter._JustCounter__secretCount)
クラスの継承
オブジェクト指向プログラミングの主な利点の1つは、コードの再利用です。この再利用を実現する方法の1つは、継承によるものです。継承によって作成された新しいクラスはサブクラスまたは派生クラスと呼ばれ、継承されたクラスは基本クラス、親クラス、またはスーパークラスと呼ばれます。
以下に示すように:Parentは、独自のプロパティとメソッドを持つ親クラスを表します。
classParent:"""親クラスを定義する"""
parentAttr =100
def __init__(self):print('親クラスのコンストラクターを呼び出す')
def parentMethod(self):print('親メソッドを呼び出す')
def setAttr(self, attr):
Parent.parentAttr = attr
def getAttr(self):print('親属性:', Parent.parentAttr)
def myMethod(self):print('私は親クラスのMyMethodです')
子は、次のように、親から継承されたサブクラスを表します。
classChild(Parent):"""サブクラスを定義する"""
def __init__(self):print('サブクラスのコンストラクターを呼び出す')
def childMethod(self):print('サブクラスメソッドを呼び出す')
def myMethod(self):"""Overrides親クラスメソッドをオーバーライドします"""print('私はMyMethodのサブクラスです')
def __str__(self):"""人間の読書に適した書き換え方法"""return'strメソッドは'
サブクラスのインスタンス化
次のように:
c =Child() #サブクラスオブジェクトをインスタンス化します
c.childMethod() #サブクラスメソッドを呼び出す
c.parentMethod() #親メソッドを呼び出す
c.setAttr(200) #親メソッドを再度呼び出して、プロパティを設定します
c.getAttr() #親クラスメソッドを再度呼び出して、属性を取得します
c.myMethod() #サブクラスのMyMethodが呼び出されます
サブクラスとクラスの関係は、以下に示すように、組み込み関数を使用して判断できます。
print(issubclass(Child, Parent)) #対応する親子関係かどうかを判断します
print(isinstance(c, Child)) #それがインスタンスオブジェクトであるかどうかを判断します
print(isinstance(c, Parent)) #それがインスタンスオブジェクトであるかどうかを判断します
Recommended Posts