news 2026/9/16 16:33:30

特殊方法使用《python语言程序设计》2018版--第8章18题第4部分(最后总结)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
特殊方法使用《python语言程序设计》2018版--第8章18题第4部分(最后总结)
__cmp__ __lt__ 小于<__le__ 小于等于<=__eq__ 等于==__ne__ 不等于!=__gt__ 大于>__ge__ 大于等于>=

如何实现

__cmp__在 Python 2.x 中是核心比较方法,可一站式定义所有比较逻辑;
Python 3.x 中被__eq__/__lt__/__gt__等取代

方法和返回值列表

方法作用触发场景返回值
__eq__定义==比较规则a==bbool
__ne__定义!=比较规则a!=bbool
__lt__定义<比较规则a<bbool
__gt__定义>比较规则a>bbool
__le__定义<=比较规则a<=bbool
__ge__定义>比较规则a>=bbool

我们直接利用两个圆的半径对比来将这些重载和特殊方法一一展示。

defmain_method():circle1=Circle(0,0,150)#圆1circle2=Circle(0,0,200)#圆2r1=circle1.get_radius()r2=circle2.get_radius()#重载相等print("__eq__测试圆1半径{r1}和圆2半径{r2}相等",r1.__eq__(r2))#重载不相等print("__ne__测试圆1半径{r1}和圆2半径{r2}不相等",r1.__ne__(r2))#重载圆1小于圆2print("__lt__测试圆1半径{r1}小于圆2半径{r2}",r1.__lt__(r2))#重载圆1大于圆2print("__gt__测试圆1半径{r1}小于圆2半径{r2}",r1.__gt__(r2))#重载圆1小于等于圆2print("__le__测试圆1半径{r1}小于圆2半径{r2}",r1.__le__(r2))#重载圆1大于等于圆2print("__ge__测试圆1半径{r1}小于圆2半径{r2}",r1.__ge__(r2))main_method()

最终完整代码

classCircle:# 建立圆形的类def__init__(self,x=0,y=0,radius=0):# 初始化self.__x=x# x私有域self.__y=y# y私有域self.__radius=radius# radius私有域# set x,y,radius域defset_x(self,x):self.__x=xdefset_y(self,y):self.__y=ydefset_radius(self,radius):ifradius<0:print("圆的半径不能为负数")self.__radius=radius# get x,y,radius域defget_x(self):returnself.__xdefget_y(self):returnself.__ydefget_radius(self):returnself.__radius# 返回圆的面积defget_area(self):return3.1415926*pow(self.__radius,2)defget_perimeter(self):return2*3.1415926*self.__radiusdef__str__(self):returnf"Circle(半径={self.__radius},周长={self.get_perimeter():.2f},面积={self.get_area():.2f})"definit_set(self):returnf"圆 x:{self.__x}, y:{self.__y}, radius:{self.__radius}."# 2025.12.14 增加测量两个圆的x,y的距离defcontains_point(self,other_x,other_y):x1=self.__x y1=self.__y x2=other_x y2=other_y countDis=int((pow((x2-x1),2)+pow((y2-y1),2))**0.5)ifcountDis<self.__radius:print(f"坐标x:{other_x},y:{other_y},点2在园1内")returnTrueelse:print(f"坐标x:{other_x},y:{other_y},点2不在园1内")returnFalse# 2025.12.14 对比圆2是否在圆1内# 2025.12.15 if条件为两点距离+圆2半径小于圆1,这样完全覆盖圆defcontains(self,circle_2D):x1=self.__x y1=self.__y x2=circle_2D.get_x()y2=circle_2D.get_y()r1=self.__radius r2=circle_2D.get_radius()countDis=(pow((x2-x1),2)+pow((y2-y1),2))**0.5ifcountDis+r2<r1:# 修改后可以完全包含print(f"坐标x:{x2},y:{y2},半径{r2},点2在园1内")returnTrueelse:print(f"坐标x:{x2},y:{y2},半径{r2},点2不在园1内")returnFalse# 2025.12.15 将昨天的圆2在圆1中的函数直接拷贝的defoverlaps(self,circle_2D):x1=self.__x y1=self.__y x2=circle_2D.get_x()y2=circle_2D.get_y()r1=self.__radius r2=circle_2D.get_radius()countDis=(pow((x2-x1),2)+pow((y2-y1),2))**0.5ifcountDis<r1andr2<r1:# 但我这个还是有瑕疵print(f"坐标x:{x2},y:{y2},半径{r2},点2在园1内")returnTrueelse:print(f"坐标x:{x2},y:{y2},半径{r2},点2不在园1内")returnFalsedef__contains__(self,other):x1=self.__x y1=self.__y x2=other.get_x()y2=other.get_y()r1=self.__radius r2=other.get_radius()countDis=(pow((x2-x1),2)+pow((y2-y1),2))**0.5ifcountDis+r2<r1:# 修改后可以完全包含print(f"坐标x:{x2},y:{y2},半径{r2},点2在园1内")returnTrueelse:print(f"坐标x:{x2},y:{y2},半径{r2},点2不在园1内")returnFalsedefmain_base():print("main_base函数。。。。。。。。。。。。。。。")a=Circle()print("默认圆函数",a.init_set())# 打印类默认的x,y,radiusx=100y=100radius=50b=Circle(x,y,radius)print("圆构造好的内容",b.init_set())defmain_add():print("main_add函数。。。。。。。。。。。。。。。")# x:1 y:2 radius:5c1=Circle(1,2,5)# 因为有__str__的帮助可以直接打印输出print(c1)print(f"周长(高纬度):{c1.get_perimeter():.6f}")# x:1 y:2 radius:10c1=Circle(1,2,10)# 因为有__str__的帮助可以直接打印输出print(f"周长(高纬度):{c1.get_perimeter():.6f}")defmain_contains_point():other_X2=120other_y2=120c1=Circle(100,200,150)c1.contains_point(other_X2,other_y2)defmain_contain_cicle():circle1=Circle(100,200,150)circle2=Circle(100,200,50)circle1.contains(circle2)#12.14用正常方法circle1.__contains__(circle2)#12.15利用修改魔法方法defmain_method():circle1=Circle(0,0,150)#圆1circle2=Circle(0,0,200)#圆2r1=circle1.get_radius()r2=circle2.get_radius()#重载相等print("__eq__测试圆1半径{r1}和圆2半径{r2}相等",r1.__eq__(r2))#重载不相等print("__ne__测试圆1半径{r1}和圆2半径{r2}不相等",r1.__ne__(r2))#重载圆1小于圆2print("__lt__测试圆1半径{r1}小于圆2半径{r2}",r1.__lt__(r2))#重载圆1大于圆2print("__gt__测试圆1半径{r1}小于圆2半径{r2}",r1.__gt__(r2))#重载圆1小于等于圆2print("__le__测试圆1半径{r1}小于圆2半径{r2}",r1.__le__(r2))#重载圆1大于等于圆2print("__ge__测试圆1半径{r1}小于圆2半径{r2}",r1.__ge__(r2))main_base()main_add()main_contains_point()main_contain_cicle()#12.14 重载测试圆2是否在圆1里main_method()#12.15重载方法测试

继续下一个题

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 13:35:31

16、编程中的颜色与图形绘制及HTML基础入门

编程中的颜色与图形绘制及HTML基础入门 1. 颜色设置 1.1 物体颜色属性 在编程中,可以分别使用 BackColor 或 ForeColor 属性来修改对象的背景和前景颜色。颜色通过 RGB(红/绿/蓝)强度来定义,每种颜色的十六进制强度范围是从 &H00 到 &H77 ,有效的颜色范…

作者头像 李华
网站建设 2026/9/16 4:32:55

PHP 8.6的JIT缓存机制揭秘:5大策略提升应用执行效率300%

第一章&#xff1a;PHP 8.6的JIT架构演进与核心变革PHP 8.6 即将带来对 JIT&#xff08;Just-In-Time&#xff09;编译器的重大架构升级&#xff0c;标志着 PHP 从解释型语言向高性能执行迈出了关键一步。本次更新聚焦于提升动态代码编译效率、优化运行时类型推断&#xff0c;并…

作者头像 李华
网站建设 2026/9/16 10:46:07

基于微信小程序的动漫社区交流小程序的设计与实现(源码+lw+部署文档+讲解等)

课题介绍本课题聚焦动漫爱好者交流渠道分散、优质内容聚合不足的痛点&#xff0c;设计实现基于微信小程序的动漫社区交流小程序。依托微信小程序轻量化、易传播的特性&#xff0c;为动漫爱好者搭建便捷的线上交流平台。系统后端搭建稳定的数据管理架构&#xff0c;支撑用户信息…

作者头像 李华
网站建设 2026/9/16 9:08:30

响应格式化踩坑实录:Symfony 8开发者必须避开的5个陷阱

第一章&#xff1a;响应格式化踩坑实录&#xff1a;Symfony 8开发者必须避开的5个陷阱 在 Symfony 8 的开发过程中&#xff0c;响应格式化是构建 RESTful API 的核心环节。然而&#xff0c;许多开发者因忽略细节而陷入常见陷阱&#xff0c;导致性能下降或接口行为异常。 忽视 …

作者头像 李华
网站建设 2026/9/16 15:32:55

PHP 8.6性能监控面板实战(专家级配置全公开)

第一章&#xff1a;PHP 8.6性能监控的核心价值与架构演进 随着现代Web应用对响应速度和系统稳定性的要求不断提升&#xff0c;PHP 8.6在性能优化方面引入了多项底层改进&#xff0c;使得运行时效率显著提升。然而&#xff0c;性能的可观测性依赖于完善的监控体系&#xff0c;因…

作者头像 李华