Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでのオブジェクト指向プログラミング?


Pythonは、その存在以来、オブジェクト指向プログラミング言語でした。クラスとオブジェクトは、オブジェクト指向プログラミングの2つの主要な構成要素です。

クラスは、オブジェクトがクラスのインスタンスである新しいタイプのオブジェクトを作成します。

最も単純なクラスの1つを作成しましょう

Pythonでクラスを定義する

空のクラスを定義しましょう。

#Define a class
class Vehicle():
   pass # An empty block

# Instantiating objects
v = Vehicle()
print(v)

結果

<__main__.Vehicle object at 0x055DB9F0>

上記で何をしましたか?

したがって、最初に、クラスステートメントを使用して新しいクラスVehicleを作成し、その後にクラスの本体を形成するインデントされたステートメントのブロックが続きます。この例では、passステートメントを使用して起訴された空のブロックがあります。

次に、Vehicleクラスを使用するために、クラスの名前とそれに続く1組の括弧を使用して、このクラスのオブジェクト/インスタンスを作成しました。次に、オブジェクトが作成されたことを確認するために、オブジェクトを印刷して、__main__モジュールにVehicleクラスのインスタンスがあるという情報を取得します。

Object(v)はクラスのインスタンスです。それぞれの特定のオブジェクトは、特定のクラスのインスタンスです。クラスのインスタンスをいくつでも作成し、クラスのメソッドとプロパティを含めることができます。

クラス内で定義されたすべてのメソッドと変数は、そのオブジェクトにアクセスできます。

クラス内のメソッドの定義

class Vehicle():
   def car(self):
      color = 'Red'
      return color

v = Vehicle()
print(v.car())
print(v)

結果

Red
<__main__.Vehicle object at 0x05A59690>

インスタンスメソッド

Pythonでは、クラスでメソッドを定義するときに、インスタンスメソッドにデフォルトの引数を1つ指定する必要があります。これはselfです。つまり、そのクラスからオブジェクトを作成すると、そのオブジェクト自体がそのメソッドに渡されます。

通常、関数の呼び出し中に引数(self)を指定することはありませんが、そのクラス内でその関数を定義する場合は常に、argument(self)が必須です。

例を使用して上記の概念を理解しましょう。

class myClass():
   def myMethod(self):
      return 'Hello'

myInstance = myClass()
print(myInstance.myMethod())

結果

Hello

したがって、上記のプログラムでは、クラスmyClassを定義し、その中にメソッドmyMethod()を定義し、selfという引数を1つだけ渡します。

ただし、クラスのインスタンスを介してメソッドを呼び出す場合、引数は提供されていません。これは、インスタンスでメソッドを呼び出すときは常に、最初の引数自体がクラスのインスタンスであるためです。

上記のプログラムから1行を変更してみましょう-

def myMethod():

メソッド(myMethod())から引数(self)を削除するだけです。それでは、プログラムをもう一度実行して、何が起こったかを見てみましょう。

================ RESTART: C:\Python\Python361\oops_python.py ================
Traceback (most recent call last):
File "C:\Python\Python361\oops_python.py", line 18, in <module>
print(myInstance.myMethod())
TypeError: myMethod() takes 0 positional arguments but 1 was given
>

したがって、メソッドに対する最初の引数は自己であることが必須です。

インスタンス属性

これらは、__init__メソッドのパラメーターとして定義されたオブジェクト固有の属性です。オブジェクトごとに異なる値を設定できます。

以下の例を検討してください

import random

class myClass():
def myMethod(self):
self.attrib1 = random.randint(1, 11)
self.attrib2 = random.randint(1,21)

myInst = myClass()
myInst.myMethod()

print(myInst.attrib1)
print(myInst.attrib2)

結果

2
18

上記のプログラムでは、「attrib1」と「attrib2」がインスタンス属性です。

PythonのInitコンストラクター

コンストラクターは、クラスのインスタンスメンバーを初期化するために使用される特定のタイプのメソッドです。

コンストラクターには2つのタイプがあります-

  • パラメーター化されたコンストラクター
  • パラメーター化されていないコンストラクター

Pythonでは、「__init__」はすべてのPythonクラスに関連付けられた一意のメソッドです。

Pythonは、クラスから作成されたすべてのオブジェクトに対して自動的に呼び出します。その目的は、ユーザーが指定した値でクラス属性を初期化することです。

オブジェクト指向プログラミングではコンストラクターと呼ばれます。

class Employee:
   def __init__(self, name):
      self.name = name
   
   def display(self):
      print("The name of the employee is: ", self.name)
obj1 = Employee('Zack')
obj2 = Employee('Rajesh')
obj3 = Employee('Tashleem')

obj3.display()
obj1.display()

結果

The name of the employee is: Tashleem
The name of the employee is: Zack

上記のプログラムでは、インスタンス(obj1&obj2)を作成するときに、name引数を渡し、コンストラクターがその引数をインスタンス属性に割り当てます。

したがって、特定のインスタンスでdisplayメソッドを呼び出すと、特定の名前が取得されます。

Pythonでのカプセル化

Pythonは本質的にオブジェクト指向であるため、メソッドと変数へのアクセスを制限する方法を提供します。

データのカプセル化が適切に行われていると、オブジェクトの属性を呼び出してインスタンス属性を直接変更することはできません。これにより、アプリケーションがハッカーに対して脆弱になります。ただし、インスタンス属性値を変更するには、特定のメソッドを呼び出すだけです。

class Product:
   def __init__(self):
      self.__maxprice = 1000
      self.__minprice = 1

   def sellingPrice(self):
      print('Our product maximum price is: {}'.format(self.__maxprice))
      print('Our product minimum price is: {}'.format(self.__minprice))

   def productMaxPrice(self, price):
      self.__maxprice = price

def productMinPrice(self, price):
self.__minprice = price

prod1= Product()
prod1.sellingPrice()

prod1.__maxprice = 1500
prod1.sellingPrice()

prod1.__minprice = 10
prod1.sellingPrice()

prod1.productMaxPrice(1500)
prod1.sellingPrice()

prod1.productMinPrice(10)
prod1.sellingPrice()

結果

Our product maximum price is: 1000
Our product minimum price is: 1
Our product maximum price is: 1000
Our product minimum price is: 1
Our product maximum price is: 1000
Our product minimum price is: 1
Our product maximum price is: 1500
Our product minimum price is: 1
Our product maximum price is: 1500
Our product minimum price is: 10

上記のプログラムでは、Productクラスのインスタンスを作成し、インスタンス変数の値を変更しようとしましたが、コンストラクター内で設定された値を提供します。

インスタンス属性の値を変更する唯一の方法は、productMaxPrice()またはproductMinPrice()メソッドを呼び出すことです。


  1. Pythonのメタクラスを使用したメタプログラミング

    メタプログラミングという用語は、コンピュータープログラムがそれ自体を操作したり、知識を持ったりしようとするコンピュータープログラミングを指します。 Pythonは、メタクラスと呼ばれる新しいタイプのクラスを介したクラスのメタプログラミングをサポートしています。 Pythonのメタクラスを介したメタプログラミングは、既存のコードを変更、ラップ、または生成することによってコードを操作する関数とクラスを構築することです。 メタプログラミングの主な機能は次のとおりです- メタクラス デコレータ クラスデコレータ メタクラスとは メタクラスの非常に限定された定義は、クラスを作成するクラスである

  2. Pythonのオブジェクト指向の概念を簡単に説明しますか?

    PythonでのOOPの概念 Pythonはオブジェクト指向プログラミング言語です。 Pythonでクラスとオブジェクトを簡単に作成して使用できます。 Pythonプログラミング言語の主なオブジェクト指向の概念を以下に示します- オブジェクト クラス 方法 継承 ポリモーフィズム データの抽象化 カプセル化 オブジェクト オブジェクトは、状態と動作を持つエンティティです。それは物理的および論理的かもしれません。例:マウス、キーボード、椅子、テーブル、ペンなど。 Pythonのすべてがオブジェクトであり、ほとんどすべてに属性とメソッドがあります。