当前位置: 首页 > news >正文

python class __format__ __bytes__区别

在Python中,__format____bytes__是两个特殊方法,它们允许对象自定义它们在特定情境下的字符串表示。以下是这两个方法的区别和作用:

__format__

  • 作用__format__方法用于定义对象在使用format()函数或格式化字符串(如f-string)时的行为。
  • 参数:接收一个格式说明符(format specifier)作为参数,该参数指定对象应该如何被格式化。
  • 返回值:应返回一个字符串,该字符串是对象的格式化表示。
  • 用法:当你调用format()函数或使用格式化字符串时,Python会调用对象的__format__方法。

示例:

class Point:def __init__(self, x, y):self.x = xself.y = ydef __format__(self, format_spec):if format_spec == 'c':return f"({self.x}, {self.y})"elif format_spec == 'p':return f"Point({self.x}, {self.y})"else:return str(self)p = Point(1, 2)
print(format(p, 'c'))  # 输出: (1, 2)
print(format(p, 'p'))  # 输出: Point(1, 2)

__bytes__

  • 作用__bytes__方法用于定义对象在调用bytes()函数时的行为。
  • 返回值:应返回一个字节串(bytes),该字节串是对象的字节表示。
  • 用法:当你调用bytes()函数时,Python会调用对象的__bytes__方法。

示例:

class MyClass:def __init__(self, data):self.data = datadef __bytes__(self):return self.data.encode('utf-8')obj = MyClass("Hello")
print(bytes(obj))  # 输出: b'Hello'

总结

  • __format__:定义对象在使用format()或格式化字符串时的行为,返回格式化后的字符串。
  • __bytes__:定义对象在调用bytes()函数时的行为,返回对象的字节表示。

两者的主要区别在于它们处理的目标不同:__format__是为了字符串格式化,而__bytes__是为了字节串转换。

format 和 __format__

使用format函数与直接调用对象的__format__方法的示例:

class MyNumber:def __init__(self, number):self.number = numberdef __format__(self, format_spec):if format_spec == 'binary':return bin(self.number)return str(self.number)n = MyNumber(42)# 使用format函数
print(format(n, 'binary'))  # 输出: 0b101010# 直接调用__format__方法
print(n.__format__('binary'))  # 输出: 0b101010

__format__方法是为类定义的特殊方法,用于定义对象的格式化行为;而format是内置函数,用户可以调用它来格式化对象,它会在内部调用对象的__format__方法。

http://www.lryc.cn/news/369378.html

相关文章:

  • C++ | Leetcode C++题解之第134题加油站
  • 【Linux】ls命令
  • 多态、虚函数表与动态绑定的深入解析
  • VitePress+Docker+jenkins构建个人网站
  • Windows11下Docker使用记录(五)
  • 快速学习Java的多维数组技巧
  • C语言运算类型有哪些
  • 【深度学习】Loss为Nan的可能原因
  • 解密!考研数学满分学霸的备考书单
  • AI绘画工具介绍
  • 【APP逆向】央视频播放量增加,逆向全过程解密
  • 三星系统因何而成?或许是因为吞噬了第四颗恒星
  • 【MySQL】(基础篇六) —— 过滤数据
  • 利用 HTML5 Canvas 实现在线签字功能
  • GaussDB技术解读——GaussDB架构介绍(二)
  • EfficientNet详解
  • UI前端交互的艺术:探索设计的四个维度、五个层面、六个要点与七大原则
  • java接口设计需要考虑哪些方面
  • Opencv图像处理
  • LeetCode | 2879.显示前三行
  • Qt实现简易播放器
  • 适配Android12启动页
  • 人工智能在医学领域的应用及技术实现
  • MySQL—多表查询—练习(1)
  • 千益畅行:合法合规的旅游卡服务,打破误解
  • 【Echarts系列】水平柱状图
  • 怎样把便签里的内容移到桌面?桌面便签软件使用方法
  • 量化入门:qmt获取可转债基本信息和行情数据
  • AVL树 ---(C++)
  • 基于spring boot+MySQL 小区物业管理系统-计算机毕设 附源码37236