什么是对象转换?
在 Python 编程中,对象转换(Object Conversion)是指将一种数据类型或对象形式转换为另一种的过程。常见场景包括:
- 基本类型之间的转换(如
str转int) - 对象与字符串之间的序列化/反序列化(如 JSON、pickle)
- 自定义类实例的格式化输出
- 跨系统数据交换时的格式适配
1. 基本类型转换
Python 提供了内置函数用于基本类型转换:
# 字符串转整数
num = int("123")
# 整数转字符串
text = str(456)
# 列表转元组
tup = tuple([1, 2, 3])
# 字典键转列表
keys = list({"a": 1, "b": 2}.keys())
2. JSON 序列化与反序列化
使用标准库 json 模块可将 Python 对象(如 dict、list)与 JSON 字符串互相转换。
import json
# Python 对象 → JSON 字符串
data = {"name": "Alice", "age": 30}
json_str = json.dumps(data)
print(json_str) # {"name": "Alice", "age": 30}
# JSON 字符串 → Python 对象
obj = json.loads(json_str)
print(obj["name"]) # Alice
注意:
json 模块仅支持基本数据类型(dict, list, str, int, float, bool, None)。自定义类需先转换为字典。
3. 使用 pickle 进行对象持久化
pickle 模块可序列化几乎任意 Python 对象(包括自定义类),但仅限 Python 环境使用。
import pickle
class Person:
def __init__(self, name):
self.name = name
p = Person("Bob")
# 序列化到字节
serialized = pickle.dumps(p)
# 反序列化还原对象
restored = pickle.loads(serialized)
print(restored.name) # Bob
安全警告: 不要反序列化来自不可信来源的 pickle 数据,可能存在代码执行风险。
4. 自定义对象转换方法
通过实现特殊方法(如 __str__, __repr__, __dict__)控制对象如何被转换。
class Book:
def __init__(self, title, author):
self.title = title
self.author = author
def __str__(self):
return f"{self.title} by {self.author}"
def to_dict(self):
return {"title": self.title, "author": self.author}
book = Book("Python指南", "张三")
print(str(book)) # Python指南 by 张三
print(book.to_dict()) # {'title': 'Python指南', 'author': '张三'}
5. 实用工具函数示例
以下是一个通用的对象转字典函数,适用于大多数简单类:
def obj_to_dict(obj):
if hasattr(obj, "__dict__"):
return obj.__dict__
elif isinstance(obj, (list, tuple)):
return [obj_to_dict(item) for item in obj]
elif isinstance(obj, dict):
return {k: obj_to_dict(v) for k, v in obj.items()}
else:
return obj
# 使用示例
book = Book("学习Python", "李四")
print(obj_to_dict(book))
# 输出: {'title': '学习Python', 'author': '李四'}