为含__dict__方法的类添加类型提示:是否有更优实现?
关于类型约束的实现建议
首先明确:你自定义HasDict Protocol的做法不算重复造轮子,但确实有几种更简洁的标准实现方式,下面逐一说明:
1. 简化版自定义Protocol(推荐)
你当前的思路是对的,用Protocol明确约束拥有__dict__属性的类型,只需要简化定义即可,无需额外复杂逻辑:
from typing import Protocol, Dict, Any class HasDict(Protocol): __dict__: Dict[str, Any]
这种方式能让mypy等类型检查器准确识别允许传入的对象,同时保持代码可读性。
2. 替代方案:直接使用object?不推荐
虽然Python中几乎所有非__slots__定义的类实例都有__dict__,但用object作为类型提示会完全失去约束意义,类型检查器无法帮你排查传入无__dict__对象的错误,所以不建议这么做。
3. 无需自定义Protocol的写法?不存在
Python标准库中并没有专门针对"拥有__dict__属性"的现成Protocol或类型,所以自定义是最直接的方案。
额外提示
如果你的场景只是需要读取对象的属性字典,也可以考虑在方法中用vars(obj)替代直接访问obj.__dict__,但这只是语法层面的简化,类型约束依然需要通过Protocol来实现。
总结:自定义HasDict Protocol是符合类型提示最佳实践的做法,不存在重复造轮子的问题,反而能让代码的类型约束更清晰。
内容的提问来源于stack exchange,提问作者edd313
相关产品推荐
相关产品推荐

