Python抽象类

抽象类

抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化

如果说类是从一堆对象中抽取相同的内容而来的,那么抽象类是从一堆中抽取相同的内容而来的,内容包括数据属性和函数属性。

补充:

1.python中并没有interface这个关键字来声明这是个接口,如果非要模仿接口的概念就用到了第三方模块,比如:abs模块。

2.接口就是只定义了一些方法,而没有实现。【(这些方法被称为抽象方法),在一个方法中直接写了一个pass就是没有实现任何功能的方法,就叫做抽象方法】

3含有抽象方法的类一定是抽象类,但是抽象类不一定含有抽象方法,此时也没有任何意义了。

注意: python中,我们不以有无执行体来区分是否是抽象类,而是根据是否有@abc.abstractmethod装饰器作为标准。

    抽象类是包含抽象方法的类,而抽象方法不包含任何可实现的代码,只能在其子类中实现抽象函数的代码。不能直接实例化抽象类!!!

子类继承父类的成员变量和成员函数。

书写标准:

在定义抽象类时继承的类加上metaclass=abc. ABCmeta

在定义的抽象类中声明属性前加上@abc.abstractproperty

在定义的抽象类中声明属性前加上@abc.abstractmethod

 

注意

1为抽象方法不包含任何可实现的代码,因此其函数体通常使用pass。下面演示抽象类的实现和多态。所谓的多态指的是在抽象类中定义一个方法,可以在其子类中重新实现,不同子类中实现的方法也不尽相同。

2. 抽象类的本质还是类,指的是一组类的相似性,包括数据属性(如all_type)和函数属性(如readwrite),而接口只强调函数属性的相似性。

EG1: 抽象类不能被实例化

import abc
class A(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def display(self):
        pass
a = A()

 执行结果:

 Traceback (most recent call last):
  File "E:/project/tkinter/tkinter_learn.py", line 868, in <module>
    a = A()
TypeError: Can't instantiate abstract class A with abstract methods display

 EG2:继承抽象类必须实现抽象方法

import abc
class A(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def display(self):
        pass
class B(A):
    def show(self):
        print("我是B")
b = B()
b.display()

实行结果:

Traceback (most recent call last):
  File "E:/project/tkinter/tkinter_learn.py", line 871, in <module>
    b = B()
TypeError: Can't instantiate abstract class B with abstract methods display

 EG3:继承抽象类实现实例化

import abc
class A(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def display(self):
        pass
class B(A):
    def display(self):
        print("我是B")
b = B()
b.display()

 实行结果:

我是B

https://www.cnblogs.com/zihe/p/7111092.html

https://blog.csdn.net/lgqiii/article/details/76607247

https://blog.csdn.net/qq_38504127/article/details/79874720

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值