首页 » 编程 » Python-5.面向对象编程设计与开发 » 正文

抽象类与归一化

讲这个之前我们先来了解一下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),而接口只强调函数属性的相似性。

抽象类是一个介于类和接口之间的一个概念,同时具备类和接口的部分特性,可以用来实现归一化设计。

 

 

发表评论

75 + = 85