第七章 面向对象(6):抽象类与归一化 'abc'

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()  # 会报错

猜你喜欢

转载自www.cnblogs.com/py-xiaoqiang/p/11210439.html