Python中如何无需重复__slots__字段实现严格对象的优雅方案?
解决方案:利用标准库
dataclasses的slots参数(Python 3.10+) Python 3.10及以上版本的标准库dataclasses提供的slots=True参数,完全匹配你的需求:
- 无需重复编写字段:通过类型注解定义类字段后,
@dataclass(slots=True)会自动生成对应的__slots__,不用手动重复字段名 - 严格限制属性新增:实例无法添加未在类中定义的属性,运行时会抛出
AttributeError - PyCharm静态检查支持:PyCharm能识别dataclass的字段定义,误写字段名、尝试新增未定义属性时,会在编码阶段直接给出错误提示,无需等到运行时
示例代码:
from dataclasses import dataclass @dataclass(slots=True) class User: id: int name: str email: str user = User(1, "Alice", "alice@example.com") user.age = 30 # PyCharm会提示错误,运行时抛出AttributeError user.nme = "Bob" # PyCharm会提示字段名错误(找不到'nme')
关于规划中的特性
目前Python官方没有公开规划中的、专门替代__slots__的新特性,dataclasses(slots=True)已经是当前最符合需求的内置方案。
内容的提问来源于stack exchange,提问作者Viktor Nagy
相关产品推荐
相关产品推荐

