首页 python基础教程 Python面向对象-抽象类的创建和用法
pay pay

Python面向对象-抽象类的创建和用法

日期: 2021年12月7日 17:25
栏目: python基础教程
阅读: 93
作者: 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()  # 子类实例不可以使用抽象类中的抽象方法

 

目录
回顶部