Pythonにおけるオブジェクト指向プログラミング
7316 ワード
Python is a fantastic programming language that allows you to use both functional and object-oriented programming paradigms.
Pythonプログラマは、基本的なオブジェクト指向プログラミングの概念を使用する必要があります.
一般的なOOPフレームワークの4つのコアの側面は、Pythonのオブジェクト指向プログラミングシステムでサポートされています.
Pythonにおけるオブジェクト指向プログラミング概念
クラスとオブジェクトは何ですか?
Pythonは、他のすべてのオブジェクト指向言語のように、オブジェクトを作成するためにクラスを定義することができます.Pythonでは、文字列、リスト、辞書などのPythonで最も一般的なデータ型です.
クラスは、特定のオブジェクト型を定義するインスタンス変数と関連メソッドのコレクションです.クラスのオブジェクトの青写真やテンプレートと考えることができます.属性はクラスを構成する変数に与えられる名前です.
プロパティの定義されたセットを持つクラスインスタンスをオブジェクトと呼びます.その結果、同じクラスを必要に応じて多くのオブジェクトを構築するために使用できます.
ブックセラーの販売ソフトのためのブックというクラスを定義しましょう.
class Book:
def __init__(self, title, quantity, author, price):
self.title = title
self.quantity = quantity
self.author = author
self.price = price
コンストラクタとしても知られているInit特別メソッドは、タイトル、数量、著者、および価格などの属性を持つブッククラスを初期化するために使用されます.Pythonでは、組み込みクラスは小文字で名前が付けられますが、ユーザー定義のクラスはCamelまたはSnakeケースで名前が付けられます.
このクラスは任意の数のオブジェクトにインスタンス化できます.次のコード例では、3つの書籍が例示されています.
book1 = Book('Book 1', 12, 'Author 1', 120)
book2 = Book('Book 2', 18, 'Author 2', 220)
book3 = Book('Book 3', 28, 'Author 3', 320)
Book 1、Book 2、Book 3はクラスブックの別のオブジェクトです.属性のselfは対応するインスタンス(オブジェクト)を指します. print(book1)
print(book2)
print(book3)
出力:<__main__.Book object at 0x00000156EE59A9D0>
<__main__.Book object at 0x00000156EE59A8B0>
<__main__.Book object at 0x00000156EE59ADF0>
オブジェクトのクラスとメモリ位置は、印刷されたときに印刷されます.私たちは、彼らがタイトル、著者名などのような特質に関する特定の情報を提供するのを期待することができません.しかし、reprと呼ばれる特定のメソッドを使うことができます.Pythonでは、特別なメソッドは、2つのアンダースコアを開始して終了する定義関数です.
class Book:
def __init__(self, title, quantity, author, price):
self.title = title
self.quantity = quantity
self.author = author
self.price = price
def __repr__(self):
return f"Book: {self.title}, Quantity: {self.quantity}, Author: {self.author}, Price: {self.price}"
book1 = Book('Book 1', 12, 'Author 1', 120)
book2 = Book('Book 2', 18, 'Author 2', 220)
book3 = Book('Book 3', 28, 'Author 3', 320)
print(book1)
print(book2)
print(book3)
出力:Book: Book 1, Quantity: 12, Author: Author 1, Price: 120
Book: Book 2, Quantity: 18, Author: Author 2, Price: 220
Book: Book 3, Quantity: 28, Author: Author 3, Price: 320
カプセル化カプセル化はクライアントが特定のプロパティにアクセスするのを防ぐプロセスです.
プライベート属性はアクセスできない属性で、情報隠蔽は特定の属性をプライベートにするプロセスです.あなたの個人的な特性を宣言する2つのアンダースコアを使用します.
本クラスでは、チェックイン割引という個人属性を紹介しましょう.
class Book:
def __init__(self, title, quantity, author, price):
self.title = title
self.quantity = quantity
self.author = author
self.price = price
self.__discount = 0.10
def __repr__(self):
return f"Book: {self.title}, Quantity: {self.quantity}, Author: {self.author}, Price: {self.price}"
book1 = Book('Book 1', 12, 'Author 1', 120)
print(book1.title)
print(book1.quantity)
print(book1.author)
print(book1.price)
print(book1.__discount)
出力:Book 1
12
Author 1
120
Traceback (most recent call last):
File "C:\Users\ashut\Desktop\Test\hello\test.py", line 19, in <module>
print(book1.__discount)
AttributeError: 'Book' object has no attribute '__discount'
すべての属性は、プライベート属性の残高割引を除いて印刷されることがわかります.プライベート属性にアクセスするには、Getterメソッドとsetterメソッドを使用します.次のコード例でプライスプロパティを非公開にし、プライス属性を指定するためにsetterメソッドを使用し、価格属性を取得するためのゲッター関数を使用します.
class Book:
def __init__(self, title, quantity, author, price):
self.title = title
self.quantity = quantity
self.author = author
self.__price = price
self.__discount = None
def set_discount(self, discount):
self.__discount = discount
def get_price(self):
if self.__discount:
return self.__price * (1-self.__discount)
return self.__price
def __repr__(self):
return f"Book: {self.title}, Quantity: {self.quantity}, Author: {self.author}, Price: {self.get_price()}"
今回、私たちは2冊のオブジェクトを作ります、1冊の購入のための1つと大量の本の購入のためのもう一つ.大量の書籍を購入している間、私たちは20 %の割引を得るので、その場合には割引を20 %に設定するためにsetHeight Discount ()メソッドを使用します.single_book = Book('Two States', 1, 'Chetan Bhagat', 200)
bulk_books = Book('Two States', 25, 'Chetan Bhagat', 200)
bulk_books.set_discount(0.20)
print(single_book.get_price())
print(bulk_books.get_price())
print(single_book)
print(bulk_books)
出力:200
160.0
Book: Two States, Quantity: 1, Author: Chetan Bhagat, Price: 200
Book: Two States, Quantity: 25, Author: Chetan Bhagat, Price: 160.0
継承遺伝はoopの最重要特性と考えられる.別のクラスからメソッドや特性を継承するクラスの能力は継承として知られています.
サブクラスまたは子クラスは継承するクラスです.スーパークラスまたは親クラスは、メソッドや属性を継承するクラスです.
つの新しいクラスは、我々の書店の販売ソフトウェアに加えられました:新しいクラスとアカデミックなクラス.
書籍が小説やアカデミックに分類されているかに関わらず、タイトルと作者のような類似した属性を持っているかもしれません.新しいクラスごとにそのコードを書き直すことは時間、労力、メモリの無駄です.
class Book:
def __init__(self, title, quantity, author, price):
self.title = title
self.quantity = quantity
self.author = author
self.__price = price
self.__discount = None
def set_discount(self, discount):
self.__discount = discount
def get_price(self):
if self.__discount:
return self.__price * (1-self.__discount)
return self.__price
def __repr__(self):
return f"Book: {self.title}, Quantity: {self.quantity}, Author: {self.author}, Price: {self.get_price()}"
class Novel(Book):
def __init__(self, title, quantity, author, price, pages):
super().__init__(title, quantity, author, price)
self.pages = pages
class Academic(Book):
def __init__(self, title, quantity, author, price, branch):
super().__init__(title, quantity, author, price)
self.branch = branch
それらを視覚化するためにこれらのクラスのオブジェクトを作成しましょう.novel1 = Novel('Two States', 20, 'Chetan Bhagat', 200, 187)
novel1.set_discount(0.20)
academic1 = Academic('Python Foundations', 12, 'PSF', 655, 'IT')
print(novel1)
print(academic1)
出力:Book: Two States, Quantity: 20, Author: Chetan Bhagat, Price: 160.0
Book: Python Foundations, Quantity: 12, Author: PSF, Price: 655
Reference
この問題について(Pythonにおけるオブジェクト指向プログラミング), 我々は、より多くの情報をここで見つけました https://dev.to/sandeepk27/object-oriented-programming-in-python-part-1-4b25テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol