抽象类与归一化
讲这个之前我们先来了解一下Java的接口,算了,我知道 不说了。
抽象类:就是提取几个类中相同的部分到一个统一的类中,其他类再继承这个类(就是java中接口的概念),抽象类中定义统一的方法,但不具体实现,由继承他的子类进行具体实现。抽象类只能被继承,不能被实例化。
归一化:进行了抽象之后,在抽象类中定义的方法要求子类里必须实现,使得在调用的时候就可以很容易的遵循统一的方法名,使得调用变的容易不容易混淆。
Python中没有像Java有一个关键字interface来实现,所以我们通过抽象类来做,需要导入abc模块来实现。
如果非要模仿接口的概念也可以借助第三方模块来做:https://pypi.org/project/zope.interface/
抽象类方式的例子:
import abc
class Animal(metaclass=abc.ABCMeta): # 在父类(抽象类)中继承metaclass=abc.ABCMeta
all_type="animal"
@abc.abstractmethod # 调用装饰器表示子类里必须实现此方法
def run(self): # 定义run方法
pass
@abc.abstractmethod # 调用装饰器表示子类里必须实现此方法
def eat(self): # 定义eat方法
pass
class Poeple(Animal):
def run(self):
print("Poeple is walking")
def eat(self):
print("Poeple is eating")
class Pig:
def run(self):
print("Pig is running")
def eat(self):
print("Pig is eating")
class Dog:
def run(self):
print("Dog is running")
def eat(self):
print("Dog is eating")
peo = Poeple()
pig = Pig()
dog = Dog()
peo.run()
pig.run()
dog.run()
peo.eat()
pig.eat()
dog.eat()
输出结果:
Poeple is walking
Pig is running
Dog is running
Poeple is eating
Pig is eating
Dog is eating
抽象类的本质还是类,指的是一组类的相似性,如例子中包括数据属性(如all_type)和函数属性(如 run、eat),而接口只强调函数属性的相似性。
抽象类是一个介于类和接口之间的一个概念,同时具备类和接口的部分特性,可以用来实现归一化设计。
共有 0 条评论