python类中的抽象函数,以及继承后子类的比较

news/2025/4/1 3:36:38/

抽象函数的定义方式

导包
from abs import ABCMeta,abstractmethod
声明抽象类
class Area(object):@abstractmethoddef area(self):pass

在抽象类中,不用写构造函数,抽象类不能进行实例化
继承抽象类的子类必须将抽象类中的函数进行重写(不重写就会报错)

补充语法特性

python3中在写类的时候已经不需要继承object这个类了,这个中写好了多个函数,最常用的就是各个自定义类的比较函数,有了这些各个类中的比较函数是非常方便的,可以进行同类型的比较

但是python3中确实没有现成的继承同一个父类的子类进行比较的方法,我们只能手写比较函数

比较函数导包
from functools import total_ordering
进行比较
@total_ordering
class Area(object):@abstractmethod  # 抽象接口装饰器# 抽象类的定义必须使用这个函数接口   def area(self):passdef __eq__(self, other):return self.area() == other.area()def __lt__(self, other):return self.area() < other.area()class Circle(Area):def __init__(self,a):self.r=adef area(self):return 3.14 * ( self.r **2)class Square(Area):def __init__(self,a,b):self.length=aself.width=bdef area(self):return self.length * self.width

特别要说的是:我们只需要写成两个函数就可以了,其他的比较大小的函数都是可以通过这两种进行组合出来的,并且是不需要我们动手进行组合的,编译器会自动帮我们实现,我们只使用就行了

如果我们只是继承了,但是在父类中没有手写比较函数,就会发生报错在这里插入图片描述


http://www.ppmy.cn/news/1213490.html

相关文章

【Spring Boot 源码学习】初识 SpringApplication

Spring Boot 源码学习系列 初识 SpringApplication 引言往期内容主要内容1. Spring Boot 应用程序的启动2. SpringApplication 的实例化2.1 构造方法参数2.2 Web 应用类型推断2.3 加载 BootstrapRegistryInitializer2.4 加载 ApplicationContextInitializer2.5 加载 Applicatio…

Think-on-Graph:基于知识图的大型语言模型的深层可靠推理11.12

Hink-on-Graph&#xff1a;基于知识图的大型语言模型的深层可靠推理 摘要1 引言2 方法2.1图上思考2.1.1图的初始化2.1.2 探索2.1.3推理 2.2 基于关系的Think on graph 摘要 尽管大型语言模型&#xff08;LLM&#xff09;在各种任务中取得了巨大的成功&#xff0c;但它们经常与…

ConstraintLayout的基本用法

ConstraintLayout的基本用法 1、基线对齐——Baseline 有时候我们需要这样一个场景&#xff1a; app:layout_constraintBaseline_toBaselineOf"id/30"2、链——Chains 用于将多个控件形成一条链&#xff0c;可以用于平分空间。 <?xml version"1.0"…

HarmonyOS 学习记录

时光荏苒,岁月如梭,韶华不负,未来可期。转眼间已经30岁了&#xff0c;学习的重要性不言而喻&#xff0c;在接下来的日子里记录下自己学习HarmonyOS的过程。增加一下知识储备&#xff0c;防患于未然嘛 不得不说华为的开发文档写的不错&#xff0c;开发工具直接安装后自动配置环境…

Technology Strategy Patterns 学习笔记6-Communicating the Strategy-Approach Patterns

1 30-Second Answer 1.1 类似麦肯锡电梯谈话 Map an outline of three bullet points in your head, and then give the executives the simple, declarative, definitive answerAdd your three reasons or characterizations with your three bullet points also as high-le…

Qt绘制网格和曲线

绘制网格&#xff1a; void Widget::drawGrid(QPainter &p, QRect &windRect) {QRect rect(windRect.left()m_margins.left(),windRect.top()m_margins.top(),windRect.width()-m_margins.left()-m_margins.right(),windRect.height()-m_margins.top()-m_margins.bo…

kubenetes-容器运行时接口CRI

一、CRI 容器运行时&#xff08;Container Runtime&#xff09;&#xff0c;运行于Kubernetes&#xff08;K8s&#xff09; 集群的每个节点中&#xff0c;负责容器的整个生命周期。其中Docker是目前应用最广的。随着容器云的发展&#xff0c;越来越多的容器运行时涌现。 为了解…

Spring Data JPA 实现集成实体对象数据库的创建、修改时间字段自动更新

JPA提供了一种事件监听器的机制&#xff0c;用于SQL审计&#xff0c;通过监听器我们可以很快速地去自动更新创建时间、修改时间&#xff0c;主要步骤如下&#xff1a; 一、创建基础实体&#xff0c;包含了创建和修改时间&#xff0c;然后让其他真正的实体继承该实体&#xff0…