7.9 抽象类与归一化 'abc'
什么是抽象类?
在java中有interface 关键字来修饰一个类,这个类定义一些方法名。 这个意思就是,这个类的子类必须具有这些方法,并且名字必须使用定义的方法名。 这样在他的子类中具体定义这些方法时就有了一个标准。 在python中没有interface这个关键字。不过通过第三方模块可以模仿interface 参考
不过在python中,有个叫抽象类的东西
抽象类的作用有些类似java中的interface:子类在继承抽象类的时候,必须实现抽象类规定的方法。
为了实现抽象类,我们需要借助第三方模块'abc'
import abc
- 作用:
- 通过抽象类,来规范子类。从而降低使用者的使用难度
- 实现抽象类:
- 导入第三方模块 import abc
- 定义父类时,参数传入 metaclass=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() # 会报错