Pythonクラスとオブジェクト–オブジェクト指向プログラミング



「Pythonクラス」に関するこのブログでは、クラス、属性、および継承、ポリモーフィズム、カプセル化などのさまざまなOOPSの概念の基礎を扱います。

Stack Overflowが2019年までに、Pythonはアクティブな開発者の点で他の言語を凌駕すると予測した後、 成長しているだけです。Pythonは、オブジェクト指向プログラミングのパラダイムに従います。 Pythonクラスの宣言、それらからのオブジェクトの作成、およびユーザーとの対話を扱います。オブジェクト指向言語では、プログラムは自己完結型のオブジェクトに分割されるか、いくつかのミニプログラムに分割されます。各オブジェクトは、それらの間で通信できるアプリケーションの異なる部分を表しています。
このPythonクラスのブログでは、クラスとオブジェクトの各側面を次の順序で理解します。

始めましょう。:-)





Pythonクラスとは何ですか?

Pythonのクラスは、特定のオブジェクトが作成される青写真です。それはあなたが特定の方法であなたのソフトウェアを構造化することを可能にします。ここにどのように質問がありますか?クラスを使用すると、データと機能を論理的にグループ化して、再利用しやすく、必要に応じて構築することができます。以下の画像を検討してください。

ClassesAndObjects-Pythonクラス-Edureka最初の画像(A)では、次のように見なすことができる家の青写真を表しています。 クラス 。同じ青写真で、いくつかの家を作成することができ、これらは次のように考えることができます オブジェクト 。クラスを使用すると、プログラムに一貫性を追加して、プログラムをよりクリーンで効率的な方法で使用できるようにすることができます。属性は、データメンバー(クラス変数とインスタンス変数)と、ドット表記を介してアクセスされるメソッドです。



  • クラス変数 クラスのすべての異なるオブジェクト/インスタンスによって共有される変数です。
  • インスタンス変数 各インスタンスに固有の変数です。これはメソッド内で定義され、クラスの現在のインスタンスにのみ属します。
  • メソッド クラスで定義され、オブジェクトの動作を説明する関数とも呼ばれます。

それでは、先に進んで、PyCharmでどのように機能するかを見てみましょう。開始するには、まずPythonクラスの構文を見てください。

構文

クラスClass_name:ステートメント-1。 。ステートメント-N

ここでは、「 クラス' ステートメントは、新しいクラス定義を作成します。クラスの名前は、キーワード「 クラス' Pythonでは、コロンが続きます。 Pythonでクラスを作成するには、次の例を検討してください。



クラスemployee:pass#no属性とメソッドemp_1 = employee()emp_2 = employee()#インスタンス変数は手動で作成できますemp_1.first = 'aayushi' emp_1.last = 'Johari' emp_1.email ='aayushi@edureka.co 'emp_1.pay = 10000 emp_2.first =' test'emp_2.last = 'abc'emp_2.email ='test@company.com'emp_2.pay = 10000 print(emp_1.email)print(emp_2.email)

出力 -

aayushi@edureka.co test@company.com

Pythonの重要なエラーは何ですか

では、これらの変数を手動で設定したくない場合はどうでしょうか。多くのコードが表示され、エラーが発生しやすくなります。したがって、自動化するには、「init」メソッドを使用できます。そのために、Pythonクラスのメソッドと属性が正確に何であるかを理解しましょう。

Pythonクラスのメソッドと属性

現在、クラスの作成は、いくつかの機能がないと不完全です。したがって、機能は、それらの属性に関連するデータおよび機能のコンテナーとして機能するさまざまな属性を設定することによって定義できます。 Pythonの関数は次のようにも呼ばれます メソッド 。について話す 初期化 方法 、これは、そのクラスの新しいオブジェクトがインスタンス化されるたびに呼び出される特別な関数です。これは初期化メソッドと考えることができます。C++、Javaなど、他のオブジェクト指向プログラミングのバックグラウンドから来ている場合は、コンストラクターと見なすことができます。クラス内にメソッドを設定すると、インスタンスを自動的に受け取ります。 Pythonクラスを進めて、このメソッドを使用して名、姓、給与を受け入れましょう。

クラスの従業員:def __init __(self、first、last、sal):self.fname = first self.lname = last self.sal = sal self.email = first + '。' +最後+ '@ company.com' emp_1 = employee( 'aayushi'、 'johari'、350000)emp_2 = employee( 'test'、 'test'、100000)print(emp_1.email)print(emp_2.email)

これで、「init」メソッド内で、これらのインスタンス変数(self、first、last、sal)を設定しました。 Selfはインスタンスです。つまり、self.fname = firstと書くと、emp_1.first = ’aayushi’と同じになります。次に、initメソッドで指定された値を渡すことができるemployeeクラスのインスタンスを作成しました。このメソッドは、インスタンスを引数として受け取ります。手動で行う代わりに、 自動的に 今。

次に、ある種のアクションを実行する機能が必要です。そのために、 方法 このクラスに。機能に従業員のフルネームを表示させたいとします。それでは、これを実際に実装しましょう。

クラスの従業員:def __init __(self、first、last、sal):self.fname = first self.lname = last self.sal = sal self.email = first + '。' + last + '@ company.com' def fullname(self):return '{} {}'。format(self.fname、self.lname)emp_1 = employee( 'aayushi'、 'johari'、350000)emp_2 = employee ( 'test'、 'test'、100000)print(emp_1.email)print(emp_2.email)print(emp_1.fullname())print(emp_2.fullname())

出力-

aayushi.johari@company.com test.test@company.com aayushijohari testtest

上記のように、クラス内に「フルネーム」というメソッドを作成しました。したがって、Pythonクラス内の各メソッドは、インスタンスを最初の引数として自動的に取得します。このメソッド内で、フルネームを出力し、emp_1の名と姓の代わりにこれを返すロジックを記述しました。次に、すべてのインスタンスで機能するように「自己」を使用しました。したがって、これを毎回印刷するには、 方法

Pythonクラスを進めると、クラスのすべてのインスタンス間で共有される変数があります。これらはとして呼ばれます クラス変数 。インスタンス変数は、名前、電子メール、salなどのインスタンスごとに一意にすることができます。複雑ですか?例を挙げてこれを理解しましょう。給与の年間上昇を確認するには、以下のコードを参照してください。

クラスの従業員:perc_raise = 1.05 def __init __(self、first、last、sal):self.fname = first self.lname = last self.sal = sal self.email = first + '。' +最後の+ '@ company.com' def fullname(self):return '{} {}'。format(self.fname、self.lname)def apply_raise(self):self.sal = int(self.sal * 1.05 )emp_1 = employee( 'aayushi'、 'johari'、350000)emp_2 = employee( 'test'、 'test'、100000)print(emp_1.sal)emp_1.apply_raise()print(emp_1.sal)

出力-

350000 367500

上記のように、私は最初に給与を印刷してから、1.5%の増加を適用しました。これらのクラス変数にアクセスするには、クラスまたはクラスのインスタンスを介してアクセスする必要があります。それでは、Pythonクラスのさまざまな属性を理解しましょう。

Pythonクラスの属性

Pythonの属性は、オブジェクト、要素、またはファイルのプロパティを定義します。属性には次の2つのタイプがあります。

  • 組み込みクラス属性: Pythonクラス内にはさまざまな組み込み属性があります。たとえば、_dict _、_ doc _、_ name _などです。employee1のすべてのキーと値のペアを表示する同じ例を見てみましょう。 そのためには、クラスの名前空間を含む以下のステートメントを簡単に記述できます。

    print(emp_1 .__ dict__)

    実行後、次のような出力が得られます:{‘fname’: ‘aayushi’、 ‘lname’: ‘johari’、 ‘sal’:350000、 ’email’: ‘aayushi.johari@company.com’}

  • ユーザーによって定義された属性 :属性はクラス定義内に作成されます。クラスの既存のインスタンスの新しい属性を動的に作成できます。属性はクラス名にもバインドできます。

次に、 パブリック、保護 そして 民間 属性。それらを詳しく理解しましょう:

ネーミング タイプ 意味
名前公衆これらの属性は、クラス定義の内外で自由に使用できます。
_名前保護されています保護された属性は、サブクラス定義の内部でない限り、クラス定義の外部で使用しないでください。
__名前民間この種の属性にはアクセスできず、表示されません。クラス定義自体の内部を除いて、これらの属性の読み取りも書き込みもできません。


次に、Pythonクラスの最も重要なコンポーネントであるオブジェクトについて理解しましょう。

Pythonクラスのオブジェクトとは何ですか?

上で説明したように、オブジェクトを使用してさまざまな属性にアクセスできます。クラスのインスタンスを作成するために使用されます。インスタンスは、実行時に作成されるクラスのオブジェクトです。

データベースをテストする方法

To簡単な概要を説明します。オブジェクトは、基本的に、周りにあるすべてのものです。例:犬は動物クラスのオブジェクトであり、私は人間クラスのオブジェクトです。同様に、同じ電話クラスに異なるオブジェクトが存在する可能性があります。これは、すでに説明した関数呼び出しと非常によく似ています。例を挙げてこれを理解しましょう。

class MyClass:def func(self):print( 'Hello')#新しいMyClassを作成しますob = MyClass()ob.func()

Pythonクラスを進めて、さまざまなOOPの概念を理解しましょう。

OOPの概念

OOPは、Pythonでのオブジェクト指向プログラミングを指します。 Pythonにはいくつかの手続き型関数が含まれているため、完全にオブジェクト指向ではありません。ここで、手続き型プログラミングとオブジェクト指向プログラミングの違いは何か疑問に思う必要があります。疑問を解消するために、手続き型プログラミングでは、関数やサブルーチンが含まれている場合でも、コード全体が1つの長いプロシージャに書き込まれます。データとロジックの両方が混在するため、管理できません。しかし、オブジェクト指向プログラミングについて話すとき、プログラムは自己完結型のオブジェクトまたはいくつかのミニプログラムに分割されます。各オブジェクトは、アプリケーションのさまざまな部分を表しており、オブジェクト間で通信するための独自のデータとロジックがあります。たとえば、Webサイトには、画像やビデオなどのさまざまなオブジェクトがあります。
オブジェクト指向プログラミングには、Pythonクラス、オブジェクト、継承、ポリモーフィズム、抽象化などの概念が含まれています。これらのトピックを詳しく理解しましょう。

Pythonクラス:継承

継承により、基本クラス/親クラスから属性とメソッドを継承できます。これは、サブクラスを作成し、親クラスからすべての機能を取得できるので便利です。次に、親クラスに影響を与えることなく、新しい機能を上書きして追加できます。例を挙げて、親クラスと子クラスの概念を理解しましょう。

画像でわかるように、子供は父親からプロパティを継承します。同様に、Pythonには2つのクラスがあります。

1.親クラス(スーパークラスまたはベースクラス)

2.子クラス(サブクラスまたは派生クラス)

プロパティを継承するクラスは、 クラス。プロパティが継承されるクラスは、 クラス。

継承とは、作成する能力を指します サブクラス 親の専門分野が含まれています。さらに、単一、マルチレベル、階層、および多重継承の4つのタイプに分けられます。以下の画像を参照して、理解を深めてください。

Pythonクラスを進めて、継承がどのように役立つかを理解しましょう。

たとえば、従業員のタイプに応じたクラスを作成したいとします。開発者とマネージャーの両方に名前、メールアドレス、給与があり、これらすべての機能が従業員クラスにあるため、サブクラスとして「開発者」と「マネージャー」を作成します。したがって、サブクラスのコードをコピーする代わりに、従業員から継承することでコードを再利用できます。

クラスemployee:num_employee = 0 raise_amount = 1.04 def __init __(self、first、last、sal):self.first = first self.last = last self.sal = sal self.email = first + '。' + last + '@ company.com' employee.num_employee + = 1 def fullname(self):return '{} {}'。format(self.first、self.last)def apply_raise(self):self.sal = int( self.sal * raise_amount)クラスdeveloper(employee):pass emp_1 = developer( 'aayushi'、 'johari'、1000000)print(emp_1.email)
 出力 --aayushi.johari@company.com

上記の出力でわかるように、employeeクラスのすべての詳細はdeveloperクラスで利用できます。開発者のraise_amountを10%に変更したい場合はどうすればよいですか?それが実際にどのように行われるか見てみましょう。

クラスemployee:num_employee = 0 raise_amount = 1.04 def __init __(self、first、last、sal):self.first = first self.last = last self.sal = sal self.email = first + '。' + last + '@ company.com' employee.num_employee + = 1 def fullname(self):return '{} {}'。format(self.first、self.last)def apply_raise(self):self.sal = int( self.sal * raise_amount)クラスdeveloper(employee):raise_amount = 1.10 emp_1 = developer( 'aayushi'、 'johari'、1000000)print(emp_1.raise_amount)
 出力 -1.1

ご覧のとおり、給与の上昇率が4%から10%に更新されています。ここで、もう1つの属性、たとえばinitメソッドにプログラミング言語を追加したいのですが、それは親クラスには存在しません。そのための解決策はありますか?はい!従業員のロジック全体をコピーしてそれを行うことはできますが、コードサイズが再び大きくなります。それを避けるために、以下のコードを考えてみましょう。

クラスemployee:num_employee = 0 raise_amount = 1.04 def __init __(self、first、last、sal):self.first = first self.last = last self.sal = sal self.email = first + '。' + last + '@ company.com' employee.num_employee + = 1 def fullname(self):return '{} {}'。format(self.first、self.last)def apply_raise(self):self.sal = int( self.sal * raise_amount)クラスdeveloper(employee):raise_amount = 1.10 def __init __(self、first、last、sal、prog_lang):super().__ init __(first、last、sal)self.prog_lang = prog_lang emp_1 = developer( 'aayushi'、 'johari'、1000000、 'python')print(emp_1.prog_lang)

したがって、ほんの少しのコードで、変更を加えました。基本クラスからプロパティを継承するsuper .__ init __(first、last、pay)を使用しました。結論として、継承はコードを再利用し、プログラムの複雑さを軽減するために使用されます。

Pythonクラス:ポリモーフィズム

コンピュータサイエンスのポリモーフィズムは、さまざまな基礎となるフォームに対して同じインターフェイスを提示する機能です。実際には、ポリモーフィズムとは、クラスBがクラスAから継承する場合、クラスAに関するすべてを継承する必要はなく、クラスAとは異なる方法で実行できることを意味します。これは、継承を処理するときに最も一般的に使用されます。 Pythonは暗黙的に多型であり、標準の演算子をオーバーロードして、コンテキストに基づいて適切な動作をすることができます。

例を挙げて理解しましょう。

class Animal:def __init __(self、name):self.name = name def talk(self):pass class Dog(Animal):def talk(self):print( 'Woof')class Cat(Animal):def talk( self):print( 'MEOW!')c = Cat( 'kitty')c.talk()d = Dog(Animal)d.talk()

出力–

ニャー!横糸

次に、別のオブジェクト指向プログラミングの概念、つまり抽象化に移りましょう。

C ++で配列を並べ替える

Pythonクラス:抽象化

抽象化は、問題に適したクラスをモデル化することにより、複雑な現実を単純化するために使用されます。ここに、インスタンス化できない抽象クラスがあります。これは、これらのクラスのオブジェクトまたはインスタンスを作成できないことを意味します。これは、基本クラスとして呼び出す特定の機能を継承するためにのみ使用できます。したがって、機能を継承することはできますが、同時に、この特定のクラスのインスタンスを作成することはできません。以下の例で抽象クラスの概念を理解しましょう。

abcからインポートABC、abstractmethodクラスEmployee(ABC):@ abstractmethod defcalculate_salary(self、sal):パスクラスDeveloper(Employee):defcalculate_salary(self、sal):finalsalary = sal * 1.10 return finalsalary emp_1 = Developer()print (emp_1.calculate_salary(10000))

出力-

11000.0

上記の出力でわかるように、基本給を10%に増やしました。つまり、給与は11000になりました。実際に続けてクラス「Employee」のオブジェクトを作成すると、Pythonのようにエラーがスローされます。抽象クラスのオブジェクトを作成することはできません。ただし、継承を使用すると、実際にプロパティを継承して、それぞれのタスクを実行できます。

つまり、これはすべてPythonクラスとオブジェクトに関するものでした。 Pythonのクラス、オブジェクト、およびPythonのさまざまなオブジェクト指向の概念のすべての基本をカバーしたので、今すぐ練習を開始できます。 「Pythonクラス」に関するこのブログを楽しんでいただき、上記で説明したすべての側面について明確に理解していただければ幸いです。 pythonクラスの後、scikitlearnライブラリと配列用のPythonに関するブログをさらに作成する予定です。乞うご期待!

質問がありますか?この「Pythonクラス」ブログのコメントセクションでそのことを伝えてください。できるだけ早くご連絡いたします。

Pythonとそのさまざまなアプリケーションについての深い知識を得るには、次のことができます。 24時間年中無休のサポートと生涯アクセスを備えたライブオンライントレーニングで。