Python中如何标注__init__方法返回自身类?
关于Python中__init__方法的返回类型标注问题
首先明确结论:不能给__init__方法标注返回类本身,原因如下:
__init__的语法规则
Python规定,__init__是实例的初始化方法,它的唯一作用是接收已由__new__创建好的实例(即self参数)并完成属性初始化,必须返回None。如果强行让__init__返回非None值,Python解释器会直接抛出TypeError。类型标注的规范
语言服务器默认给__init__标注() -> None是完全符合Python类型规范的。虽然普通函数可以自由标注返回类型,但__init__属于特殊方法,有严格的返回值限制,类型检查工具(如mypy、pyright)也会对__init__的非None返回标注报错。正确的实例类型标注方式
如果需要标注返回当前类实例的场景,应该用在工厂方法(比如类方法)中,使用Self类型(Python 3.11+原生支持,低版本可从typing_extensions导入):
from typing import Self class Tree: def __init__(self) -> None: self.value = 0 @classmethod def create_empty_tree(cls) -> Self: return cls()
内容的提问来源于stack exchange,提问作者Miguel Cruz Santiago
相关产品推荐
相关产品推荐

