7.9抽象クラスと正規化された「ABC」
抽象クラスとは何ですか?
クラスを変更するには、Javaでありinterfaceキーワードは、このクラスはメソッド名を定義します。これは、このクラスのサブクラスを使用すると、定義された名前やメソッド名を使用する必要があり、これらのメソッドを持たなければならない、ということを意味します。このように、彼の特定のサブクラスがこれらのメソッドを定義するには標準があります。Pythonで何interfaceキーワードはありません。しかし、あなたは、サードパーティのでインターフェースモジュールを模倣することができます参照
しかし、パイソン、何か抽象クラスという男で
ややJavaインタフェースでの抽象クラスの役割に似て:サブクラスが抽象クラスを継承し、抽象クラスで指定された方法は、実装する必要があります。
抽象クラスを達成するために、我々は、サードパーティのモジュール「ABC」の助けが必要
import abc
- 役割:
- 抽象クラスを介して、サブクラスが規制します。これにより、ユーザーの使用しての難しさを軽減
- 抽象クラス:
- インポートサードパーティのモジュールは、ABCをインポート
- 親クラスが定義されている場合、パラメータが渡されたメタクラス= abc.ABCMeta
- この方法は、@ abc.abstractmethodを変更するための仕様の必要性を必要とします
- 抽象クラスの機能:
- 唯一継承することができ、インスタンス化することはできません
import abc
class Animal(metaclass=abc.ABCMeta): # 定义Animal成抽象类
@abc.abstractmethod # 用装饰器修饰必须子类定义的方法
def run(self):
pass
@abc.abstractmethod
def eat(self):
pass
class People(Animal):
def run(self):
print('people run')
def eat(self):
print('people eat')
class Dog(Animal):
def run1(self): # 如果子类不定义同样名字的方法,实例化的时候就会报错。
print('dog run')
def eat1(self): # 如果子类不定义同样名字的方法,实例化的时候就会报错。
print('dog eat')
p1 = People()
d1 = Dog() # 会报错