logo

Python OOP の概念

オブジェクト指向プログラミングは Python の基本概念であり、開発者がモジュール式で保守可能でスケーラブルなアプリケーションを構築できるようにします。 OOP の核となる原則 (クラス、オブジェクト、継承、カプセル化、ポリモーフィズム、抽象化) を理解することで、プログラマは Python の OOP 機能の可能性を最大限に活用して、複雑な問題に対する洗練された効率的なソリューションを設計できます。

Python のオブジェクト指向プログラミングとは何ですか?

Python のオブジェクト指向プログラミング (OOP) は、プログラミングでオブジェクトとクラスを使用するプログラミング パラダイムです。継承、ポリモーフィズム、カプセル化などの現実世界のエンティティをプログラミングに実装することを目的としています。オブジェクト指向プログラミング (OOP) または Python の oops の主な概念は、コードの他の部分がこのデータにアクセスできないように、単一のユニットとして連携して動作するデータと関数をバインドすることです。



Python の OOP の概念

  • Pythonの授業
  • Python のオブジェクト
  • Python のポリモーフィズム
  • Python でのカプセル化
  • Python の継承
  • Python でのデータ抽象化
Python OOP

Python OOP の概念

Pythonクラス

クラスはオブジェクトのコレクションです。クラスには、オブジェクトの作成元となるブループリントまたはプロトタイプが含まれます。これは、いくつかの属性とメソッドを含む論理エンティティです。

クラスを作成する必要性を理解するために、例を考えてみましょう。品種や年齢など、さまざまな属性を持つ犬の数を追跡したいとします。リストを使用する場合、最初の要素は犬の品種、2 番目の要素は年齢を表すことができます。 100 匹の異なる犬がいると仮定しましょう。では、どの要素がどの要素であるかをどうやって知ることができるでしょうか?これらの犬に他のプロパティを追加したい場合はどうすればよいでしょうか?これには組織性が欠けており、まさにクラスが必要です。



Python クラスのいくつかのポイント:

  • クラスはキーワードクラスによって作成されます。
  • 属性はクラスに属する変数です。
  • 属性は常にパブリックであり、ドット (.) 演算子を使用してアクセスできます。例: Myclass.Myattribute

クラス定義の構文:

class ClassName: # Statement-1 . . . # Statement-N>

Python で空のクラスを作成する

上の例では、class キーワードを使用して Dog という名前のクラスを作成しました。



jpa と休止状態の比較
パイソン
# Python3 program to # demonstrate defining # a class class Dog: pass>

Python オブジェクト

オブジェクト指向プログラミング Python では、オブジェクトは、状態と動作が関連付けられたエンティティです。マウス、キーボード、椅子、テーブル、ペンなどの実世界のオブジェクトが考えられます。整数、文字列、浮動小数点数、配列、辞書もすべてオブジェクトです。より具体的には、任意の 1 つの整数または任意の文字列がオブジェクトです。数字の 12 はオブジェクト、文字列 Hello, world はオブジェクト、リストは他のオブジェクトを保持できるオブジェクトなどです。あなたはずっとオブジェクトを使ってきましたが、それに気づいていないかもしれません。

オブジェクトは次のもので構成されます。

  • 州: それはオブジェクトの属性によって表されます。また、オブジェクトのプロパティも反映されます。
  • 行動: それはオブジェクトのメソッドによって表されます。また、他のオブジェクトに対するオブジェクトの反応も反映します。
  • 身元: これにより、オブジェクトに一意の名前が付けられ、あるオブジェクトが他のオブジェクトと対話できるようになります。

状態、行動、アイデンティティを理解するために、犬クラス (上で説明) の例を考えてみましょう。

  • アイデンティティは犬の名前と考えられます。
  • 状態または属性は、犬の品種、年齢、または色と考えることができます。
  • その行動は、犬が食事をしているのか、眠っているのかについて考えることができます。

オブジェクトの作成

これにより、上で定義したクラス Dog の obj という名前のオブジェクトが作成されます。オブジェクトとクラスについて詳しく説明する前に、オブジェクトとクラスを操作するときに使用されるいくつかの基本的なキーワードを理解しましょう。

Python3
obj = Dog()>

Python 自身

  1. クラス メソッドには、メソッド定義に追加の最初のパラメーターが必要です。メソッドを呼び出すときにこのパラメータの値を指定しません。Python が値を提供します。
  2. 引数を取らないメソッドがある場合でも、引数が 1 つ必要です。
  3. これは、C++ のこのポインターや Java のこの参照に似ています。

このオブジェクトのメソッドを myobject.method(arg1, arg2) として呼び出すと、これは Python によって自動的に MyClass.method(myobject, arg1, arg2) に変換されます。これが特別な self に関するすべてです。

注記: 詳細については、以下を参照してください。 Python クラスの self

Python __init__ メソッド

__init__ メソッド C++ や Java のコンストラクターに似ています。これは、クラスのオブジェクトがインスタンス化されるとすぐに実行されます。このメソッドは、オブジェクトに対して実行したい初期化を行うのに役立ちます。次に、クラスを定義し、self メソッドと __init__ メソッドを使用していくつかのオブジェクトを作成しましょう。

クラス属性とインスタンス属性を使用したクラスとオブジェクトの作成

Python3
class Dog: # class attribute attr1 = 'mammal' # Instance attribute def __init__(self, name): self.name = name # Driver code # Object instantiation Rodger = Dog('Rodger') Tommy = Dog('Tommy') # Accessing class attributes print('Rodger is a {}'.format(Rodger.__class__.attr1)) print('Tommy is also a {}'.format(Tommy.__class__.attr1)) # Accessing instance attributes print('My name is {}'.format(Rodger.name)) print('My name is {}'.format(Tommy.name))>

出力
Rodger is a mammal Tommy is also a mammal My name is Rodger My name is Tommy>

メソッドを使用したクラスとオブジェクトの作成

ここでは、Dog クラスが 2 つの属性で定義されています。

  • 属性1 値に設定されたクラス属性です 哺乳類 。クラス属性は、クラスのすべてのインスタンスで共有されます。
  • __init__ は、Dog クラスのインスタンスを初期化する特別なメソッド (コンストラクター) です。これは、self (作成されるインスタンスを参照) と name (犬の名前を表す) の 2 つのパラメーターを取ります。 name パラメーターは、Dog の各インスタンスに name 属性を割り当てるために使用されます。
    speech メソッドは Dog クラス内で定義されます。このメソッドは、犬のインスタンスの名前を含む文字列を出力します。

ドライバー コードは、Dog クラスの 2 つのインスタンス (Rodger と Tommy) を作成することから始まります。 __init__ メソッドは各インスタンスに対して呼び出され、指定された名前で名前属性を初期化します。 speech メソッドは両方のインスタンス (Rodger.speak() と Tommy.speak()) で呼び出され、それぞれの犬にその名前のステートメントを出力させます。

Python3
class Dog: # class attribute attr1 = 'mammal' # Instance attribute def __init__(self, name): self.name = name def speak(self): print('My name is {}'.format(self.name)) # Driver code # Object instantiation Rodger = Dog('Rodger') Tommy = Dog('Tommy') # Accessing class methods Rodger.speak() Tommy.speak()>

出力
My name is Rodger My name is Tommy>

注記: 詳細については、以下を参照してください。 Python のクラスとオブジェクト

リティク・ローシャンの年齢

Pythonの継承

Python オブジェクト指向プログラミングでは、継承とは、あるクラスが別のクラスからプロパティを派生または継承する機能です。プロパティを派生するクラスは派生クラスまたは子クラスと呼ばれ、プロパティの派生元のクラスは基本クラスまたは親クラスと呼ばれます。継承の利点は次のとおりです。

  • 現実世界の人間関係をよく表しています。
  • これにより、コードの再利用が可能になります。同じコードを何度も書く必要はありません。また、クラスを変更せずに、クラスに機能を追加することもできます。
  • これは本質的に推移的です。つまり、クラス B が別のクラス A から継承する場合、B のすべてのサブクラスは自動的にクラス A から継承します。

相続の種類

  • 単一の継承 : 単一レベルの継承により、派生クラスが単一親クラスから特性を継承できるようになります。
  • 多レベルの継承: マルチレベル継承により、派生クラスは直接の親クラスからプロパティを継承し、その親クラスはその親クラスからプロパティを継承することができます。
  • 階層的な継承: 階層レベルの継承により、複数の派生クラスが親クラスからプロパティを継承できるようになります。
  • 多重継承: 複数レベルの継承により、1 つの派生クラスが複数の基本クラスからプロパティを継承できます。

Python の継承

上記の記事では、Person (親クラス) と Employee (子クラス) という 2 つのクラスを作成しました。 Employee クラスは Person クラスを継承します。上記のコードの表示関数に見られるように、employee クラスを通じて person クラスのメソッドを使用できます。子クラスは、details() メソッドを通じて親クラスの動作を変更することもできます。

Python3
# Python code to demonstrate how parent constructors # are called. # parent class class Person(object): # __init__ is known as the constructor def __init__(self, name, idnumber): self.name = name self.idnumber = idnumber def display(self): print(self.name) print(self.idnumber) def details(self): print('My name is {}'.format(self.name)) print('IdNumber: {}'.format(self.idnumber)) # child class class Employee(Person): def __init__(self, name, idnumber, salary, post): self.salary = salary self.post = post # invoking the __init__ of the parent class Person.__init__(self, name, idnumber) def details(self): print('My name is {}'.format(self.name)) print('IdNumber: {}'.format(self.idnumber)) print('Post: {}'.format(self.post)) # creation of an object variable or an instance a = Employee('Rahul', 886012, 200000, 'Intern') # calling a function of the class Person using # its instance a.display() a.details()>

出力
Rahul 886012 My name is Rahul IdNumber: 886012 Post: Intern>

注記: 詳細については、こちらを参照してください。 Python の継承 チュートリアル。

Python ポリモーフィズム

オブジェクト指向プログラミング Python では、ポリモーフィズムは単に多くの形式を持つことを意味します。たとえば、指定された種類の鳥が飛ぶかどうかを判断する必要がありますが、ポリモーフィズムを使用すると、単一の関数でこれを行うことができます。

Python のポリモーフィズム

このコードは、Python oops の継承と Python クラスでのメソッドのオーバーライドの概念を示しています。これは、サブクラスが親クラスで定義されたメソッドをオーバーライドして、親クラスから他のメソッドを継承しながら特定の動作を提供する方法を示しています。

Python3
class Bird: def intro(self): print('There are many types of birds.') def flight(self): print('Most of the birds can fly but some cannot.') class sparrow(Bird): def flight(self): print('Sparrows can fly.') class ostrich(Bird): def flight(self): print('Ostriches cannot fly.') obj_bird = Bird() obj_spr = sparrow() obj_ost = ostrich() obj_bird.intro() obj_bird.flight() obj_spr.intro() obj_spr.flight() obj_ost.intro() obj_ost.flight()>

出力
There are many types of birds. Most of the birds can fly but some cannot. There are many types of birds. Sparrows can fly. There are many types of birds. Ostriches cannot fly.>

注記: 詳細については、こちらを参照してください。 Python のポリモーフィズム チュートリアル。

Python のカプセル化

Python オブジェクト指向プログラミングでは、カプセル化はオブジェクト指向プログラミング (OOP) の基本概念の 1 つです。データをラップするという考え方と、1 つの単位内でデータを処理する方法について説明します。これにより、変数やメソッドへの直接アクセスに制限がかかり、データが誤って変更されるのを防ぐことができます。偶発的な変更を防ぐために、オブジェクトの変数はオブジェクトのメソッドによってのみ変更できます。このようなタイプの変数はプライベート変数として知られています。

クラスは、メンバー関数、変数などのすべてのデータをカプセル化するためのカプセル化の一例です。

Python でのカプセル化

上の例では、c 変数をプライベート属性として作成しました。この属性に直接アクセスすることも、その値を変更することもできません。

bash if ステートメント
Python3
# Python program to # demonstrate private members # '__' double underscore represents private attribute.  # Private attributes start with '__'. # Creating a Base class class Base: def __init__(self): self.a = 'techcodeview.com' self.__c = 'techcodeview.com' # Creating a derived class class Derived(Base): def __init__(self): # Calling constructor of # Base class Base.__init__(self) print('Calling private member of base class: ') print(self.__c) # Driver code obj1 = Base() print(obj1.a) # Uncommenting print(obj1.c) will # raise an AttributeError # Uncommenting obj2 = Derived() will # also raise an AtrributeError as # private member of base class # is called inside derived class>

出力
techcodeview.com>

注記: 詳細については、「 Python でのカプセル化 チュートリアル。

データの抽象化

不要なコードの詳細をユーザーから隠します。また、コード実装の機密部分を公開したくない場合、ここでデータ抽象化が登場します。

Python でのデータの抽象化は、抽象クラスを作成することで実現できます。

Python によるオブジェクト指向プログラミング |セット 2 (データの隠蔽とオブジェクトの印刷)