小公司做网站还是微博杭州网站seo
- 作者: 五速梦信息网
- 时间: 2026年04月20日 07:10
当前位置: 首页 > news >正文
小公司做网站还是微博,杭州网站seo,学校网站建设项目背景,学生做网站的软件目录 一、概述 1、定义 2、作用 二、应用场景 1、构造和析构 2、操作符重载 3、字符串和表示 4、容器管理 5、可调用对象 6、上下文管理 7、属性访问和描述符 8、迭代器和生成器 9、数值类型 10、复制和序列化 11、自定义元类行为 12、自定义类行为 13、类型检…目录 一、概述 1、定义 2、作用 二、应用场景 1、构造和析构 2、操作符重载 3、字符串和表示 4、容器管理 5、可调用对象 6、上下文管理 7、属性访问和描述符 8、迭代器和生成器 9、数值类型 10、复制和序列化 11、自定义元类行为 12、自定义类行为 13、类型检查和转换 14、自定义异常 三、学习方法 1、理解基础 2、查阅文档 3、编写示例 4、实践应用 5、阅读他人代码 6、参加社区讨论 7、持续学习 8、练习与总结 9、注意兼容性 10、避免过度使用 四、魔法方法 17、float方法 17-1、语法 17-2、参数 17-3、功能 17-4、返回值 17-5、说明 17-6、用法 18、floor方法 18-1、语法 18-2、参数 18-3、功能 18-4、返回值 18-5、说明 18-6、用法 19、floordiv方法 19-1、语法 19-2、参数 19-3、功能 19-4、返回值 19-5、说明 19-6、用法 五、推荐阅读 1、Python筑基之旅 2、Python函数之旅 3、Python算法之旅 4、博客个人主页 一、概述 1、定义 魔法方法(Magic Methods/Special Methods也称特殊方法或双下划线方法)是Python中一类具有特殊命名规则的方法它们的名称通常以双下划线()开头和结尾。 魔法方法用于在特定情况下自动被Python解释器调用而不需要显式地调用它们它们提供了一种机制让你可以定义自定义类时具有与内置类型相似的行为。 2、作用 魔法方法允许开发者重载Python中的一些内置操作或函数的行为从而为自定义的类添加特殊的功能。 二、应用场景 1、构造和析构 1-1、init(self, [args…])在创建对象时初始化属性。 1-2、new(cls, [args…])在创建对象时控制实例的创建过程(通常与元类一起使用)。 1-3、del(self)在对象被销毁前执行清理操作如关闭文件或释放资源。 2、操作符重载 2-1、add(self, other)、sub(self, other)、mul(self, other)等自定义对象之间的算术运算。 2-2、eq(self, other)、ne(self, other)、lt(self, other)等定义对象之间的比较操作。 3、字符串和表示 3-1、str(self)定义对象的字符串表示常用于print()函数。 3-2、repr(self)定义对象的官方字符串表示用于repr()函数和交互式解释器。 4、容器管理 4-1、getitem(self, key)、setitem(self, key, value)、delitem(self, key)用于实现类似列表或字典的索引访问、设置和删除操作。 4-2、len(self)返回对象的长度或元素个数。 5、可调用对象 5-1、call(self, [args…])允许对象像函数一样被调用。 6、上下文管理 6-1、enter(self)、exit(self, exc_type, exc_val, exc_tb)用于实现上下文管理器如with语句中的对象。 7、属性访问和描述符 7-1、getattr__, setattr, delattr这些方法允许对象在访问或修改不存在的属性时执行自定义操作。 7-2、描述符(Descriptors)是实现了get, set, 和delete方法的对象它们可以控制对另一个对象属性的访问。 8、迭代器和生成器 8-1、iter和next这些方法允许对象支持迭代操作如使用for循环遍历对象。 8-2、aiter, anext这些是异步迭代器的魔法方法用于支持异步迭代。 9、数值类型 9-1、int(self)、float(self)、complex(self)定义对象到数值类型的转换。 9-2、index(self)定义对象用于切片时的整数转换。 10、复制和序列化 10-1、copy和deepcopy允许对象支持浅复制和深复制操作。 10-2、getstate和setstate用于自定义对象的序列化和反序列化过程。 11、自定义元类行为 11-1、metaclass(Python 2)或元类本身(Python 3)允许自定义类的创建过程如动态创建类、修改类的定义等。 12、自定义类行为 12-1、init和new用于初始化对象或控制对象的创建过程。 12-2、init_subclass在子类被创建时调用允许在子类中执行一些额外的操作。 13、类型检查和转换 13-1、instancecheck和subclasscheck用于自定义isinstance()和issubclass()函数的行为。 14、自定义异常 14-1、你可以通过继承内置的Exception类来创建自定义的异常类并定义其特定的行为。 三、学习方法 要学好Python的魔法方法你可以遵循以下方法及步骤 1、理解基础 首先确保你对Python的基本语法、数据类型、类和对象等概念有深入的理解这些是理解魔法方法的基础。 2、查阅文档 仔细阅读Python官方文档中关于魔法方法的部分文档会详细解释每个魔法方法的作用、参数和返回值。你可以通过访问Python的官方网站或使用help()函数在Python解释器中查看文档。 3、编写示例 为每个魔法方法编写简单的示例代码以便更好地理解其用法和效果通过实际编写和运行代码你可以更直观地感受到魔法方法如何改变对象的行为。 4、实践应用 在实际项目中尝试使用魔法方法。如你可以创建一个自定义的集合类使用getitem、setitem和delitem方法来实现索引操作。只有通过实践应用你才能更深入地理解魔法方法的用途和重要性。 5、阅读他人代码 阅读开源项目或他人编写的代码特别是那些使用了魔法方法的代码这可以帮助你学习如何在实际项目中使用魔法方法。通过分析他人代码中的魔法方法使用方式你可以学习到一些新的技巧和最佳实践。 6、参加社区讨论 参与Python社区的讨论与其他开发者交流关于魔法方法的使用经验和技巧在社区中提问或回答关于魔法方法的问题这可以帮助你更深入地理解魔法方法并发现新的应用场景。 7、持续学习 Python语言和其生态系统不断发展新的魔法方法和功能可能会不断被引入保持对Python社区的关注及时学习新的魔法方法和最佳实践。 8、练习与总结 多做练习通过编写各种使用魔法方法的代码来巩固你的理解定期总结你学到的知识和经验形成自己的知识体系。 9、注意兼容性 在使用魔法方法时要注意不同Python版本之间的兼容性差异确保你的代码在不同版本的Python中都能正常工作。 10、避免过度使用 虽然魔法方法非常强大但过度使用可能会导致代码难以理解和维护在编写代码时要权衡使用魔法方法的利弊避免滥用。 总之学好Python的魔法方法需要不断地学习、实践和总结只有通过不断地练习和积累经验你才能更好地掌握这些强大的工具并在实际项目中灵活运用它们。 四、魔法方法 17、float方法 17-1、语法 float(self, /)float(self) 17-2、参数 17-2-1、self(必须)一个对实例对象本身的引用在类的所有方法中都会自动传递。 17-2-2、/(可选)这是从Python 3.8开始引入的参数注解语法它表示这个方法不接受任何位置参数(positional-only parameters)之后的关键字参数(keyword arguments)。 17-3、功能 用于定义一个对象到浮点数的转换规则。 17-4、返回值 返回一个浮点数。 17-5、说明 具体来说以下几种情况可能会触发float方法的调用 17-5-1、使用内置的float函数尝试将一个对象转换为浮点数时。 17-5-2、在需要进行数学运算(如加法、减法、乘法、除法等)的上下文中如果操作数之一是对 象而另一个是浮点数或需要浮点数的操作(如除法)则可能会调用该对象的float方法。 17-5-3、在需要浮点数类型的其他内置函数或方法中如果提供了不支持直接操作的对象可能会 调用该对象的float方法。 17-6、用法
017、float方法
1、简单的数值类
定义一个名为SimpleNumber的类
class SimpleNumber:# 类的初始化方法当创建SimpleNumber对象时自动调用def init(self, value):# 将传入的value参数赋值给对象的value属性self.value value# 定义float方法用于将对象转换为浮点数def float(self):# 返回self.value的浮点数形式return float(self.value)
如果这个脚本作为主程序运行而不是被导入为模块
if name main:# 创建一个SimpleNumber对象n并传入值5.2n SimpleNumber(5.2)# 使用内置的float函数和SimpleNumber类的float方法将n转换为浮点数f float(n)# 打印转换后的浮点数fprint(f) # 输出: 5.2# 2、分数类(有理数)
定义一个名为Fraction的类用于表示分数
class Fraction:# 初始化方法当创建Fraction对象时调用def init(self, numerator, denominator):# 设置分数的分子self.numerator numerator# 设置分数的分母self.denominator denominator# 定义转换为浮点数的特殊方法def float(self):# 返回分数的浮点数值即分子除以分母return self.numerator / self.denominator
如果这个脚本作为主程序运行而不是被导入为模块
if name main:# 创建一个Fraction对象f分子为3分母为4f Fraction(3, 4)# 使用内置的float函数和Fraction类的float方法将f转换为浮点数float_f float(f)# 打印转换后的浮点数float_fprint(float_f) # 输出: 0.75# 3、带有单位的度量类(如距离)
定义一个名为Distance的类用于表示距离
如果这个脚本作为主程序运行而不是被导入为模块
if name main:# 创建一个Distance对象d表示100.5米的距离d Distance(100.5)# 使用内置的float函数和Distance类的float方法将d转换为浮点数float_d float(d)# 打印转换后的浮点数float_dprint(float_d) # 输出: 100.5# 4、复数类(尽管Python内置了复数类型但可以作为示例)
定义一个名为MyComplex的类用于表示复数
class MyComplex:# 初始化方法用于创建MyComplex对象时设置实部和虚部def init(self, real, imag):# 设置实部self.real real# 设置虚部self.imag imag# 定义转换为浮点数的特殊方法# 当尝试将MyComplex对象转换为浮点数时会调用此方法def float(self):# 如果虚部不为0if self.imag ! 0:# 抛出ValueError异常表示不能将有虚部的复数转换为浮点数raise ValueError(Cannot convert complex number with imaginary part to float)# 如果虚部为0则返回实部的浮点数值return float(self.real)
如果这个脚本作为主程序运行而不是被导入为模块
if name main:# 创建一个实部为3虚部为0的MyComplex对象cc MyComplex(3, 0)# 使用内置的float函数和MyComplex类的float方法将c转换为浮点数f float©# 打印转换后的浮点数fprint(f) # 输出: 3.0try:# 创建一个实部为3虚部为4的MyComplex对象c_with_imagc_with_imag MyComplex(3, 4)# 尝试将c_with_imag转换为浮点数但由于虚部不为0所以会抛出ValueError异常float_c_with_imag float(c_with_imag) # 这会抛出ValueErrorexcept ValueError as e:# 捕获ValueError异常并打印异常信息print(e) # 输出: Cannot convert complex number with imaginary part to float# 5、时间类(转换为以秒为单位的浮点数)
从datetime模块中导入timedelta类timedelta类用于表示两个日期或时间之间的差异
from datetime import timedelta
定义一个名为TimeDuration的类用于封装timedelta并允许通过不同的时间单位进行初始化
class TimeDuration:def init(self, days0, seconds0, microseconds0, milliseconds0, minutes0, hours0, weeks0):# 因为timedelta不接受milliseconds参数并且weeks参数需要转换为days所以我们先进行计算# 将weeks转换为days1周 7天# 注意在Python 3中timedelta直接支持weeks参数但在Python 2中不支持td timedelta(daysdays weeks * 7, secondsseconds, microsecondsmicroseconds, minutesminutes, hourshours)# 如果提供了毫秒milliseconds则需要将其转换为秒和微秒# 注意这里我们省略了毫秒的转换因为timedelta不接受毫秒作为直接参数# 如果需要可以在此添加转换逻辑# 将计算好的timedelta赋值给实例的duration属性self.duration td# 定义转换为浮点数的特殊方法返回时间差的总秒数def float(self):# 调用辅助函数total_seconds来获取duration的总秒数# 注意在Python 3中timedelta有一个total_seconds()方法但在Python 2中没有return total_seconds(self.duration)
辅助函数用于计算timedelta对象的总秒数
在Python 2中timedelta没有直接的total_seconds方法所以我们自己实现
def total_seconds(td):# 计算总秒数包括天、小时、分钟、秒和微秒return (td.microseconds (td.seconds td.days * 24 * 3600) * 1e6) / 1e6 if name main:# 创建一个TimeDuration对象表示1天2小时30分钟的时间差td TimeDuration(days1, hours2, minutes30)# 使用内置的float函数和TimeDuration类的float方法将td转换为浮点数总秒数float_td float(td)# 打印转换后的总秒数print(float_td) # 输出: 95400.0具体取决于你的系统时间精度但在这个例子中应该是准确的# 6、字符串表示的数字转换为浮点数
定义一个名为 StringNumber 的类用于将字符串表示的数字转换为浮点数
class StringNumber:# 初始化方法接收一个字符串类型的数字作为参数def init(self, number_str):# 将接收到的字符串类型的数字保存到实例变量 number_str 中self.number_str number_str# 定义转换为浮点数的特殊方法# 当尝试将 StringNumber 对象转换为浮点数时会调用此方法def float(self):# 使用 Python 内置的 float 函数将 number_str 转换为浮点数# 并返回这个浮点数return float(self.number_str)
判断当前脚本是否作为主程序运行而不是被导入为模块
if name main:# 创建一个 StringNumber 对象传入一个表示数字的字符串 3.14159sn StringNumber(3.14159)# 使用内置的 float 函数和 StringNumber 类的 float 方法将 sn 转换为浮点数# 注意这里实际上不需要显式调用 float(sn)因为当 sn 被用于需要浮点数的上下文中时# Python 会自动调用 sn 的 float 方法。但为了展示和明确转换这里显式调用了 float(sn)f float(sn)# 打印转换后的浮点数print(f) # 输出: 3.14159 18、floor方法 18-1、语法 floor(self, /)Flooring an Integral returns itself 18-2、参数 18-2-1、self(必须)一个对实例对象本身的引用在类的所有方法中都会自动传递。 18-2-2、/(可选)这是从Python 3.8开始引入的参数注解语法它表示这个方法不接受任何位置参数(positional-only parameters)之后的关键字参数(keyword arguments)。 18-3、功能 用于定义数值类型的“向下取整”行为。 18-4、返回值 返回不大于对象所表示数值的最大整数也就是所谓的“向下取整”或“地板除”的结果。 18-5、说明 关于返回值floor方法应该返回一个与原始对象相同类型或兼容类型的对象其值是不大于原始对象所表示数值的最大整数。 18-6、用法
018、floor方法
1、基本使用
定义一个名为 MyNumber 的类用于封装一个数值并提供一些特殊方法
class MyNumber:# 类的初始化方法用于创建 MyNumber 类的实例def init(self, value):# 将传入的 value 参数赋值给实例变量 self.valueself.value value# 定义一个特殊方法 floor用于返回 self.value 的向下取整值def floor(self):# 导入 math 模块尽管在类中导入模块不是最佳实践但这里为了注释而保留import math# 调用 math.floor 方法对 self.value 进行向下取整并返回结果return math.floor(self.value)
当这个脚本作为主程序运行时以下代码块会被执行
if name main:# 创建一个 MyNumber 类的实例 num并传入初始值 3.7num MyNumber(3.7)# 调用 num 实例的 floor 方法并打印返回的结果即 3.7 的向下取整值print(num.floor()) # 输出: 3# 2、自定义运算符中的使用
导入math模块该模块包含了一些数学运算的函数和常量
import math
定义一个名为MyNumber的类用于封装数值并提供自定义的数学运算
class MyNumber:# 初始化方法用于创建MyNumber对象时设置初始值def init(self, value):self.value value # 将传入的value赋值给对象的value属性# 定义一个特殊方法floor用于返回对象的value属性的向下取整值def floor(self):return math.floor(self.value) # 使用math模块中的floor函数对value进行向下取整# 定义一个特殊方法int用于将MyNumber对象转换为整数def int(self):return int(self.value) # 定义int方法以返回整数值这里将value转换为整数并返回# 定义一个特殊方法add用于实现MyNumber对象之间的加法运算def add(self, other):if isinstance(other, MyNumber): # 如果other也是MyNumber对象return MyNumber(self.value other.value) # 返回两个对象value属性之和组成的新MyNumber对象else: # 如果other不是MyNumber对象return MyNumber(self.value other) # 返回对象value属性与other之和组成的新MyNumber对象# 定义一个特殊方法floordiv用于实现MyNumber对象之间的整数除法运算def floordiv(self, other):if isinstance(other, MyNumber): # 如果other也是MyNumber对象floored_self self.floor() # 对self的value属性进行向下取整floored_other other.floor() # 对other的value属性进行向下取整return MyNumber(floored_self // floored_other) # 返回两个向下取整后的值进行整除运算的结果组成的新MyNumber对象else: # 如果other不是MyNumber对象return MyNumber(self.floor() // other) # 对self的value属性进行向下取整然后与other进行整除运算返回结果组成的新MyNumber对象
当这个脚本作为主程序运行时以下代码块会被执行
if name main:# 创建两个MyNumber对象num1和num2并分别设置初始值7.3和2num1 MyNumber(7.3)num2 MyNumber(2)# 使用//运算符调用num1的floordiv方法与num2进行整数除法运算并打印结果print(num1 // num2) # 使用floordiv输出: MyNumber(3)# 将num1和num2进行整数除法运算的结果转换为整数并打印print(int(num1 // num2)) # 现在可以正确转换为整数输出: 3# 3、在类中自动转换
定义一个名为MyNumber的类用于封装数值并提供一些特殊方法
class MyNumber:# 类的初始化方法用于设置对象的初始值def init(self, value):# 将传入的value参数赋值给对象的value属性self.value value# 定义一个特殊方法floor用于返回对象value属性的向下取整值def floor(self):# 导入math模块该模块包含数学相关的函数import math# 调用math模块中的floor函数对value进行向下取整并返回结果return math.floor(self.value)# 定义一个特殊方法int用于将对象转换为整数类型def int(self):# 调用floor方法获取value的向下取整值# 然后将该值转换为整数类型并返回return int(self.floor())
当这个脚本作为主程序运行时以下代码块会被执行
if name main:# 创建一个MyNumber对象num并传入初始值3.7num MyNumber(3.7)# 调用num对象的int方法将其转换为整数类型并打印结果# 这里通过内置的int函数间接调用了num的int方法print(int(num)) # 输出: 3# 4、类的继承与重写
定义一个名为MyNumber的类用于封装数值并提供向下取整的方法
class MyNumber:# 类的初始化方法用于设置对象的初始值def init(self, value):# 将传入的value参数赋值给对象的value属性self.value value# 定义一个特殊方法floor用于返回对象value属性的向下取整值def floor(self):# 导入math模块虽然通常建议在文件顶部导入但这里为了说明也可在方法内部导入import math# 调用math模块中的floor函数对value进行向下取整并返回结果return math.floor(self.value)# 定义一个特殊方法int用于将对象转换为整数类型def int(self):# 调用floor方法获取value的向下取整值# 然后将该值转换为整数类型并返回return int(self.floor())
定义一个继承自MyNumber的SpecialNumber类
class SpecialNumber(MyNumber):# 重写父类MyNumber的floor方法def floor(self):# 使用super()函数调用父类MyNumber的floor方法# 然后将返回的结果减1得到SpecialNumber对象的特殊向下取整值return super().floor() - 1
当这个脚本作为主程序运行时以下代码块会被执行
if name main:# 创建一个SpecialNumber对象num并传入初始值4.3num SpecialNumber(4.3)# 调用num对象的int方法将其转换为整数类型并打印结果# 这里通过内置的int函数间接调用了num的int方法# SpecialNumber类重写了floor方法所以其int方法返回的是特殊向下取整后的整数值print(int(num)) # 输出: 3因为 4.3 向下取整是 4然后减 1 得到 3# 5、与其他类型进行比较
定义一个名为MyNumber的类用于封装数值并提供一些特殊方法
class MyNumber:# 类的初始化方法用于设置对象的初始值def init(self, value):# 将传入的value参数赋值给对象的value属性self.value value# 定义一个特殊方法floor用于返回对象value属性的向下取整值def floor(self):# 导入math模块尽管通常在文件顶部导入模块但在此为了注释说明也可以放在方法内部import math# 调用math模块中的floor函数对value进行向下取整并返回结果return math.floor(self.value)# 定义一个特殊方法eq用于比较两个对象是否相等def eq(self, other):# 如果other是整数类型if isinstance(other, int):# 则比较MyNumber对象的向下取整值是否等于otherreturn self.floor() other# 如果other不是整数类型则返回NotImplemented表示不支持该类型的比较# 这样可以让Python尝试进行其他类型的比较如other也是MyNumber对象return NotImplemented
当这个脚本作为主程序运行时以下代码块会被执行
if name main:# 创建一个MyNumber对象num并传入初始值3.0num MyNumber(3.0)# 使用操作符比较num对象和整数3是否相等# 由于num的value是3.0向下取整后仍为3所以比较结果为Trueprint(num 3) # 输出: True# 6: 自定义格式化输出
定义一个名为 MyNumber 的类
class MyNumber:# 类的初始化方法用于创建 MyNumber 类的实例def init(self, value):# 将传入的 value 赋值给实例变量 self.valueself.value value# 定义一个特殊方法 floor它用于实现取整向下取整的功能def floor(self):# 导入 math 模块尽管这里最好是在文件顶部导入但为了符合仅注释代码的要求这里也可以接受import math# 使用 math.floor 方法对 self.value 进行向下取整并返回结果return math.floor(self.value)# 定义一个特殊方法 format它允许对象自定义其字符串表示形式# format_spec 是格式说明符它描述了如何格式化对象def format(self, format_spec):# 如果格式说明符为 .floor则调用 floor 方法并返回其结果的字符串形式if format_spec .floor:return str(self.floor())# 如果格式说明符不是 .floor则返回 NotImplemented表示不支持该格式return NotImplemented
如果当前运行的脚本而不是导入的模块是主程序则执行以下代码
if name main:# 创建一个 MyNumber 类的实例 num并传入值 3.7num MyNumber(3.7)# 使用 format 函数和 .floor 格式说明符来格式化 num 对象并打印结果# 由于 MyNumber 类定义了 format 方法并处理了 .floor 格式说明符因此这里会输出 3print(format(num, .floor)) # 输出: 3 19、floordiv方法 19-1、语法 floordiv(self, other, /)Return self//other 19-2、参数 19-2-1、self(必须)一个对实例对象本身的引用在类的所有方法中都会自动传递。 19-2-2、other(必须)表示与self进行地板除法的另一个值它可以是任何类型但通常应该是与 self兼容的数值类型。 19-2-3、/(可选)这是从Python 3.8开始引入的参数注解语法它表示这个方法不接受任何位置参数(positional-only parameters)之后的关键字参数(keyword arguments)。 19-3、功能 用于定义当对象使用//运算符进行地板除法时的行为。 19-4、返回值 返回一个表示地板除法结果的对象。 19-5、说明 对于floordiv方法它的返回值通常是与原始对象类型相同或兼容的数值类型对象其值是两个操作数进行地板除法的结果然而这个返回值的具体类型完全取决于你的实现。 19-6、用法
019、floordiv方法
1、简单的整数类
class SimpleInt:def init(self, value):# 初始化方法设置实例的 value 属性self.value valuedef floordiv(self, other):# 定义地板除法运算符的行为if isinstance(other, (int, float)):# 如果 other 是整数或浮点数则执行地板除法并返回结果return self.value // otherelse:# 如果 other 不是整数或浮点数则抛出类型错误raise TypeError(Unsupported operand type(s) for //: SimpleInt and {}.format(type(other).name)) if name main:# 创建一个 SimpleInt 类的实例 a并设置其值为 10a SimpleInt(10)# 定义一个普通的整数 b其值为 3b 3# 使用 // 运算符调用 a 的 floordiv 方法并打印结果# 这里将输出整数 3因为 10 // 3 的结果是 3print(a // b) # 这会调用 SimpleInt 的 floordiv 方法输出应为 3# 2、自定义除法规则类 class CustomDiv:def init(self, value):# 初始化方法设置实例的value属性self.value valuedef floordiv(self, other):# 地板除法特殊方法用于处理自定义除法规则if isinstance(other, int):# 检查other是否为整数# 如果self.value是非负数则执行正常的地板除法即减去余数# 如果self.value是负数则先取负数的绝对值进行整除再取负值因为负数的整除行为是向负无穷方向取整return self.value - (self.value % other) if self.value 0 else -((-self.value) // other)else:# 如果other不是整数则抛出类型错误raise TypeError(Unsupported operand type(s) for //: CustomDiv and {}.format(type(other).name)) if name main:# 创建一个CustomDiv实例并设置其value为10cd CustomDiv(10)# 调用CustomDiv的floordiv方法即执行cd // 3并打印结果# 因为10 0所以直接执行self.value - (self.value % other)即10 - (10 % 3) 10 - 1 9print(cd // 3) # 输出9# 直接使用类名和参数创建另一个CustomDiv实例其value为-10# 调用该实例的floordiv方法即执行CustomDiv(-10) // 3并打印结果# 因为-10 0所以先取-10的绝对值即10执行整除10 // 3 3然后取负值即-3print(CustomDiv(-10) // 3) # 输出-3因为-10 0, 所以取-((-10) // 3)# 3、时间类(用于计算时间差) from datetime import timedelta class TimeDuration:def init(self, hours, minutes, seconds):# 初始化方法接收小时、分钟和秒作为参数并使用timedelta创建时间差对象self.duration timedelta(hourshours, minutesminutes, secondsseconds)def floordiv(self, other):# 定义地板除法运算符的行为if isinstance(other, TimeDuration):# 如果 other 是 TimeDuration 的实例则计算 self 的总秒数与 other 的总秒数# 使用整数除法来计算 self 可以包含多少个 other# 假设我们想以 other 的时长为单位计算 self 的时长可以包含多少个 othertotal_seconds self.duration.total_seconds() # 获取 self 的总秒数other_seconds other.duration.total_seconds() # 获取 other 的总秒数# 使用整数除法 // 来获取结果并返回结果return int(total_seconds // other_seconds)else:# 如果 other 不是 TimeDuration 的实例则抛出类型错误raise TypeError(fUnsupported operand type(s) for //: TimeDuration and {type(other).name})def str(self):# 定义字符串表示方法返回 timedelta 对象的字符串表示return str(self.duration) if name main:# 创建一个 TimeDuration 对象 duration_a表示 2 小时 30 分钟duration_a TimeDuration(2, 30, 0) # 2小时30分钟# 创建一个 TimeDuration 对象 duration_b表示 15 分钟duration_b TimeDuration(0, 15, 0) # 15分钟# 使用地板除法运算符 // 来计算 duration_a 包含多少个 duration_b# 输出结果应为 10因为 2 小时 30 分钟 包含 10 个 15 分钟print(duration_a // duration_b) # 输出: 10 (因为 2小时30分钟 包含 10个15分钟)# 4、自定义货币类(用于货币除法并取整) class Currency:def init(self, amount, currency_codeUSD):# 初始化方法接受货币金额和货币代码作为参数默认为USDself.amount float(amount)# 将货币金额转换为浮点数并存储在self.amount中self.currency_code currency_code# 存储货币代码在self.currency_code中def floordiv(self, other):# 定义地板除法运算符的行为if isinstance(other, (int, float, Currency)):# 检查其他对象是否为整数、浮点数或Currency的实例if isinstance(other, Currency):# 如果其他对象是Currency的实例则提取其金额other_amount other.amountelse:# 如果其他对象是整数或浮点数则将其转换为浮点数other_amount float(other)# 使用Python内置的整数除法//来计算结果并创建一个新的Currency对象来存储结果return Currency(self.amount // other_amount, self.currency_code)else:# 如果其他对象不是整数、浮点数或Currency的实例则抛出TypeErrorraise TypeError(fUnsupported operand type(s) for //: Currency and {type(other).name})def str(self):# 定义字符串表示方法返回货币金额和货币代码的字符串表示return f{self.amount} {self.currency_code} if name main:# 创建一个Currency对象money_a表示100.00 USDmoney_a Currency(100.00)# 创建一个Currency对象money_b表示20.00 USDmoney_b Currency(20.00)# 使用地板除法运算符//计算money_a除以money_b的结果并打印结果预期输出: 5.0 USDprint(money_a // money_b) # 输出: 5.0 USD (注意这里虽然用浮点数表示但实际是整数除法)# 使用浮点数2作为除数再次计算money_a的结果并打印结果预期输出: 50.0 USD# 注意这里由于self.amount是浮点数而//是整数除法但在Python 3中//对于浮点数执行的是向下取整的除法print(money_a // 2) # 输出: 50.0 USD 五、推荐阅读 1、Python筑基之旅 2、Python函数之旅 3、Python算法之旅 4、博客个人主页
- 上一篇: 小店怎么做网站网站被降权表现
- 下一篇: 小公司做网站需要珠海建设网站的公司
相关文章
-
小店怎么做网站网站被降权表现
小店怎么做网站网站被降权表现
- 技术栈
- 2026年04月20日
-
小创业公司网站怎么做网站建设为什么这么贵
小创业公司网站怎么做网站建设为什么这么贵
- 技术栈
- 2026年04月20日
-
小程序做网站个人社保缴费比例是多少
小程序做网站个人社保缴费比例是多少
- 技术栈
- 2026年04月20日
-
小公司做网站需要珠海建设网站的公司
小公司做网站需要珠海建设网站的公司
- 技术栈
- 2026年04月20日
-
小豪自助建站ftp修改wordpress密码
小豪自助建站ftp修改wordpress密码
- 技术栈
- 2026年04月20日
-
小豪自助建站wordpress 汉化不是很好
小豪自助建站wordpress 汉化不是很好
- 技术栈
- 2026年04月20日






