首页 python基础教程 Python面向对象-抽象类的封装(@ abc.abstractmethod)和用法
pay pay
教程目录

Python面向对象-抽象类的封装(@ abc.abstractmethod)和用法

日期: 二月 14, 2023, 12:09 a.m.
栏目: python基础教程
阅读: 522
作者: Python自学网-村长

摘要: 抽象类也是一个类,但是使用抽象类不能直接创建实例,会报错,一般是为了实现子类公共功能而封装的类。封装抽象类需要借助装饰器:@ abc.abstractmethod

抽象类也是一个类,但是使用抽象类不能直接创建实例,会报错,一般是为了实现子类公共功能而封装的类。封装抽象类需要借助装饰器:@ abc.abstractmethod

import abc
class Person(object, metaclass=abc.ABCMeta):
    @ abc.abstractmethod
    def jump(self):
        print('跳起来')

    def eat(self):
        print('XXXXXXXX')

class Man(Person):
    def run(self):
        print('跑的很快')

class Woman(Person):
    def run(self):
        print('跑的一般')

直接使用抽象类创建实例:

p = Person()

返回结果:

TypeError: Can't instantiate abstract class Person with abstract methods jump

 使用子类创建实例:

m = Man()
m.run()
m.eat()  # 子类实例可以使用抽象类中的方法
m.jump()  # 子类实例不可以使用抽象类中的抽象方法

返回结果:

TypeError: Can't instantiate abstract class Woman with abstract methods jump

这时候我们发现还是返回错误,是什么原因呢?是因为我们在抽象类中定义了一个抽象方法,如果使用抽象类派生子类,必须要在子类中实现父类中的抽象方法。

import abc
class Person(object, metaclass=abc.ABCMeta):
    @ abc.abstractmethod
    def jump(self):
        print('跳起来')

    def eat(self):
        print('XXXXXXXX')

class Man(Person):
    def jump(self):
        print('跑的很快')


m = Man()
# m.run()  # AttributeError: 'Man' object has no attribute 'run'
m.eat()  # 子类实例可以使用抽象类中的方法
m.jump()  # 子类实例不可以使用抽象类中的抽象方法

 

部分文字内容为【Python自学网】原创作品,转载请注明出处!视频内容已申请版权,切勿转载!
回顶部