首页 > 编程知识 正文

python有没有抽象类,python虚拟环境是什么

时间:2023-05-05 04:32:44 阅读:139931 作者:4096

前面两节介绍了Python抽象类的实际子类的定义和使用。 本节介绍虚拟子类方法,这是另一种抽象类的实现方法。

一.相关概念

虚拟子类是指将其他不是从抽象基类派生的类“注册到抽象基类”并允许Python解释器使用该类作为抽象基类的子类,从而称为虚拟子类,并且是第三方类注册的虚拟子类后,无论是否实现了抽象基类中的抽象内容,Python都会将其视为抽象基类的子类,并且在调用issubclass、isinstance和抽象基类时返回True

通过这样的注册虚拟子类的增加是抽象基类动态性的体现,也是符合Python风格的方式。 它允许我们动态、清晰地改变班级的隶属关系。 当类从抽象基类继承时,该类必须完成抽象基类定义的语义; 类注册为虚拟子类后,此限制不再具有约束力,程序开发人员可以约束自身,从而提高灵活性和可扩展性。 当然,也会发生意想不到的问题。 当框架程序使用第三方插件时,该功能可以通过采用虚拟子类来明确接口。 只要第三方插件能够为框架程序提供所需的接口,则无论其类型如何,都可以使用抽象基类调用相关功能,并且框架程序可能会破坏与外部接口的内部实现的兼容性老猴认为,从某种意义上说,虚拟子类模式是继承模式下多态性的实现。

二.语法

1 .定义虚拟子类的前一步均与实际子类相同,首先是import abc模块,然后定义抽象基类;

2 .定义子类

3 .将子类注册为抽象基类的虚拟子类。 语法如下。

基类名称. register (子类名称)三、示例说明

1、以上一节Shape类为例,定义抽象基类

from abc import ABC,abstractmethod

类形状(ABC ) :

@abstractmethod

定义获取defgetarea(:pass )面积的抽象方法

@abstractmethod

defgetgirth(:pass )定义获取周长的抽象方法

2、定义非Shape派生类

类主机() :

def __init__(self,area ) :self.area=area

defshowarea(self ) :return self.area

3、将House类注册为Shape的子类

shape.register(house ) )。

4、定义House类的实例化变量

豪斯-豪斯(100 )

5、确定House类是否为Shape子类,实例House是否为Shape的实例

issubclass(house,Shape ) )。

实例(house,Shape ) )。

四.执行代码及截图

#coding:utf-8

#抽象类的虚拟子类

from abc import ABC,abstractmethod

类形状(ABC ) :

@abstractmethod

定义获取defgetarea(:pass )面积的抽象方法

类主机() :

def __init__(self,area ) :self.area=area

defshowarea(self ) :return self.area

shape.register(house ) )。

issubclass(house,Shape ) )。

豪斯-豪斯(100 )

实例(house,Shape ) )。

house.getArea执行错误,没有这个方法

调整classhouse(: )类定义,并将showArea方法更改为getArea

def __init__(self,area ) :self.area=area

defgetarea(self ) :return self.area

为了重新定义issubclass(house,Shape )类,函数必须返回False

重新注册shape.register(house ) #虚拟子类

重新定义house=house(100 ) #变量:

issubclass(house,Shape ) )。

实例(house,Shape ) )。

本节结合案例详细介绍如何通过在抽象基类中注册子类来实现虚拟子类。 注册虚拟子类后,所有实现抽象基类而不需要子类的抽象方法在特定场景中都非常有用。

Python (https://blog.csdn.net/laoyuanpython )系列文章逐步介绍了学习python后总结的学习经验。 这些经验有助于从未接触过python的程序员轻松进入python世界。

欢迎您的批评指正。 感谢您的关注。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。