本答案页包含 Python dataclasses 的 4 道选择题、4 道填空题和 4 道输出预测题,每题都给出准确答案和简短解释。
答案已完整展示,建议先尝试作答,再用本页核对。第一次练习最好从互动练习页开始。
哪个装饰器会把类变成 dataclass?
答案: @dataclass
为什么: dataclass 装饰器读取带注解的字段,并生成常用方法。
dataclass 默认会生成什么?
答案: __init__、__repr__ 和 __eq__
为什么: 默认的 dataclass 提供初始化、显示和值相等比较。
frozen=True 会阻止什么?
答案: 给属性赋值
为什么: frozen dataclass 在创建后给属性赋值会报错。
代码的输出结果是什么?
from dataclasses import dataclass
@dataclass
class P:
x: int
print(P(1))答案: P(x=1)
为什么: 自动生成的 repr 包含类名和字段值。
补全提供 dataclass 的模块。
from ____ import dataclass答案: dataclasses
为什么: 这个装饰器来自 dataclasses 模块。
补全字段注解。
from dataclasses import dataclass
@dataclass
class P:
x: ____答案: int
为什么: x 被声明为整数字段。
补全 active 的默认值。
from dataclasses import dataclass
@dataclass
class U:
name: str
active: bool = ____答案: True
为什么: 省略 active 时,它默认是 True。
补全把实例转换成字典的函数。
from dataclasses import dataclass, asdict
@dataclass
class P:
x: int
p = P(2)
print(____(p))答案: asdict
为什么: asdict 返回字段名和值组成的普通字典。
屏幕上会显示什么?
from dataclasses import dataclass
@dataclass
class P:
x: int
print(P(2))答案: P(x=2)
为什么: 自动生成的 repr 显示类名和字段,P(x=2)。
这段代码会输出什么?
from dataclasses import dataclass
@dataclass
class P:
x: int
print(P(1) == P(1))答案: True
为什么: dataclass 会比较字段,所以两个 x=1 的实例相等。
运行结果是什么?
from dataclasses import dataclass
@dataclass
class U:
name: str
active: bool = True
print(U("Ada").active)答案: True
为什么: active 的默认值是 True,实例可以直接读取它。
这段程序打印出什么?
from dataclasses import dataclass, asdict
@dataclass
class P:
x: int
print(asdict(P(2)))答案: {'x': 2}
为什么: asdict 返回包含字段值的普通字典。
先试一遍题目
打开 Python dataclasses 练习页,用即时反馈回答同样的 12 道题。