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

Pythonの抽象基本クラス(abc)


クラスに1つ以上の抽象メソッドが含まれている場合、そのクラスは抽象クラスと呼ばれます。抽象メソッドは宣言されているメソッドですが、実装は含まれていません。抽象クラスはインスタンス化されない場合があり、その抽象メソッドはそのサブクラスによって実装される必要があります。

抽象基本クラスは、hasattr()のような他の手法が不器用であるか、微妙に間違っている場合(たとえば、マジックメソッドを使用する場合)にインターフェイスを定義する方法を提供します。 ABCは、仮想サブクラスを導入します。これは、クラスから継承しないが、isinstance()およびissubclass()関数によって認識されるクラスです。 Pythonには多くの組み込みABCがあります。 Iterator、Generator、Set、mappingなどのデータ構造のABCは、collections.abcモジュールで定義されています。数値モジュールは、数値データ型の基本クラスのコレクションである数値タワーを定義します。 Pythonライブラリの「abc」モジュールは、カスタム抽象基本クラスを定義するためのインフラストラクチャを提供します。

'abc'は、基本クラスのメソッドを抽象としてマークすることによって機能します。これは@absttractmethodデコレータによって行われます。そのような抽象基本クラスのサブクラスである具象クラスは、その抽象メソッドをオーバーライドすることによって抽象ベースを実装します。

abcモジュールはABCMetaを定義します 抽象基本クラスを定義するためのメタクラスであるクラス。次の例では、ABCMetaを使用してShapeクラスを抽象基本クラスとして定義しています。形状クラスには、abstractmethodで装飾されたarea()メソッドがあります。

Rectangleクラスは、上記のShapeクラスを親として使用し、abstract area()メソッドを実装するようになりました。具象クラスなので、インスタンス化して実装されたarea()メソッドを呼び出すことができます。

import abc
class Shape(metaclass=abc.ABCMeta):
   @abc.abstractmethod
   def area(self):
      pass
class Rectangle(Shape):
   def __init__(self, x,y):
      self.l = x
      self.b=y
   def area(self):
      return self.l*self.b
r = Rectangle(10,20)
print ('area: ',r.area())

抽象基本クラスには複数の抽象メソッドが含まれる場合があることに注意してください。子クラスはそれらすべてを実装する必要があり、失敗するとどのTypeErrorが発生します。

abcモジュールはABCも定義します 抽象基本クラスの定義でABCMetaクラスの代わりに使用できるヘルパークラス。

class Shape(abc.ABC):
   @abc.abstractmethod
   def area(self):
      pass

抽象基本クラスからサブクラス化する代わりに、レジスタクラスデコレータによって抽象ベースとして登録できます。

class Shape(abc.ABC):
   @abc.abstractmethod
   def area(self):
      pass
@Shape.register
class Rectangle():
   def __init__(self, x,y):
   self.l = x
   self.b=y
   def area(self):
      return self.l*self.b

デコレータ@abstractclassmethodと@abstractstaticメソッドデコレータによって、抽象基本クラスにクラスメソッドと静的メソッドをそれぞれ提供することもできます。


  1. Pythonでのクラスと継承の概要

    オブジェクト指向プログラミングは、プロジェクトでのコードの冗長性を防ぐために、再利用可能なコードパターンを作成します。リサイクル可能なコードを作成する1つの方法は、あるサブクラスが別の基本クラスのコードを利用する場合の継承です。 継承とは、クラスが別のクラス内で記述されたコードを使用する場合です。 子クラスまたはサブクラスと呼ばれるクラスは、親クラスまたは基本クラスからメソッドと変数を継承します。 ChildサブクラスはParent基本クラスから継承しているため、ChildクラスはParentのコードを再利用でき、プログラマーが使用するコード行を減らし、冗長性を減らすことができます。 派

  2. Pythonでクラスを定義する方法は?

    Pythonでは、ほとんどすべてのコードがクラスを使用して実装されています。プログラマーはクラスを使用して、関連するコードをまとめます。これは、オブジェクト指向構造のコレクションであるキーワード「クラス」を使用して行われます。 クラスは、オブジェクトを作成するためのテンプレートです。オブジェクトにはメンバー変数があり、それらに関連付けられた動作があります。 Pythonでは、クラスはキーワードclassによって作成されます。 たとえば、関数のない単純な空のクラスを作成しましょう。 >>> class Cars: ... pass キーワードclassの後には、最初の文字