Python中如何定义抽象类的说明?

2026-05-21 17:191阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计741个文字,预计阅读时间需要3分钟。

Python中如何定义抽象类的说明?

抽象类是一种特殊的类,只能被继承,不能实例化。抽象类中可以包含抽象方法和普通方法。注意:子类继承抽象类,必须实现抽象类中的抽象方法。不能直接创建抽象类对象,必须通过继承抽象类并实现其方法来创建。


抽象类是一个特殊的类,只能被继承,不能实例化,抽象类中可以有抽象方法和普通方法。

Python中如何定义抽象类的说明?

注意:子类继承了抽象类父类,子类必须实现父类的抽象方法。

  • 不能直接创建抽象对象
  • 必须用一个子类来继承抽象父类
  • 子类必须覆盖重写抽象父类
  • 创建子类对象进行使用
  • (一)定义抽象类

    定义抽象类需要导入 abc模块。

    from abc import ABCMeta, abstractmethod

    (二)定义抽象方法

    抽象方法:只定义方法,不具体实现方法体。

    在定义抽象方法时需要在前面加入:@abstractmethod

    抽象方法不包含任何可实现的代码,因此其函数体通常使用pass。

    class ABC(metaclass=ABCMeta):

    @abc.abstractmethod
    def setA(self, a):
    pass

    @abc.abstractmethod
    def getA(self):
    pass

    (三)继承抽象类

    class Test(ABC):
    __a = None

    def setA(self, a):
    self.__a = a


    def getA(self):
    print(self.__a)


    if __name__ == '__main__':
    t = Test()
    t.setA(10)
    t.getA()



    # 10 打印输出

    (四) 直接实例抽象类

    class ABC(metaclass=abc.ABCMeta):

    @abc.abstractmethod
    def setA(self, a):
    pass

    @abc.abstractmethod
    def getA(self):
    pass



    if __name__ == '__main__':
    ABC()

    直接运行报错:

    Traceback (most recent call last):
    File "test.py", line 19, in <module>
    ABC()
    TypeError: Can't instantiate abstract class ABC with abstract methods getA, setA

    TypeError:无法使用抽象方法getA,setA实例化抽象类ABC

    注意:

  • 抽象类中不一定包含抽象方法, 但是有抽象方法必定是抽象类
  • 抽象的子类必须重写所有父类抽象方法, 否则运行报错, 排除子类也是抽象类
  • 补充:

    python中关于这个里边的私有方法(private)、保护方法(protected)、公开方法(public)

    __foo__: 定义的是特殊方法,一般是系统定义名字 ,类似 __init__() 之类的。
    _foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *
    __foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。
    foo:就是public方法

    本文共计741个文字,预计阅读时间需要3分钟。

    Python中如何定义抽象类的说明?

    抽象类是一种特殊的类,只能被继承,不能实例化。抽象类中可以包含抽象方法和普通方法。注意:子类继承抽象类,必须实现抽象类中的抽象方法。不能直接创建抽象类对象,必须通过继承抽象类并实现其方法来创建。


    抽象类是一个特殊的类,只能被继承,不能实例化,抽象类中可以有抽象方法和普通方法。

    Python中如何定义抽象类的说明?

    注意:子类继承了抽象类父类,子类必须实现父类的抽象方法。

  • 不能直接创建抽象对象
  • 必须用一个子类来继承抽象父类
  • 子类必须覆盖重写抽象父类
  • 创建子类对象进行使用
  • (一)定义抽象类

    定义抽象类需要导入 abc模块。

    from abc import ABCMeta, abstractmethod

    (二)定义抽象方法

    抽象方法:只定义方法,不具体实现方法体。

    在定义抽象方法时需要在前面加入:@abstractmethod

    抽象方法不包含任何可实现的代码,因此其函数体通常使用pass。

    class ABC(metaclass=ABCMeta):

    @abc.abstractmethod
    def setA(self, a):
    pass

    @abc.abstractmethod
    def getA(self):
    pass

    (三)继承抽象类

    class Test(ABC):
    __a = None

    def setA(self, a):
    self.__a = a


    def getA(self):
    print(self.__a)


    if __name__ == '__main__':
    t = Test()
    t.setA(10)
    t.getA()



    # 10 打印输出

    (四) 直接实例抽象类

    class ABC(metaclass=abc.ABCMeta):

    @abc.abstractmethod
    def setA(self, a):
    pass

    @abc.abstractmethod
    def getA(self):
    pass



    if __name__ == '__main__':
    ABC()

    直接运行报错:

    Traceback (most recent call last):
    File "test.py", line 19, in <module>
    ABC()
    TypeError: Can't instantiate abstract class ABC with abstract methods getA, setA

    TypeError:无法使用抽象方法getA,setA实例化抽象类ABC

    注意:

  • 抽象类中不一定包含抽象方法, 但是有抽象方法必定是抽象类
  • 抽象的子类必须重写所有父类抽象方法, 否则运行报错, 排除子类也是抽象类
  • 补充:

    python中关于这个里边的私有方法(private)、保护方法(protected)、公开方法(public)

    __foo__: 定义的是特殊方法,一般是系统定义名字 ,类似 __init__() 之类的。
    _foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *
    __foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。
    foo:就是public方法