Python存根文件中Getter/Setter方法的正确注解方式
Python存根文件中Getter/Setter方法的正确注解方式
嗨,这个问题我之前也碰到过,PyCharm对存根文件里的属性注解有时候确实会有点“认死理”,咱们一步步来解决它~
你遇到的错误,根源在于存根文件里同时显式写了getter和setter的注解。PyCharm会混淆两者的返回类型逻辑——它看到getter返回int,就误以为整个属性的操作(包括设置)都应该返回int,但Python里的setter本来就默认返回None,这就导致了类型不匹配的报错。
这里有两种符合规范的正确写法,都能解决这个问题:
1. 最简洁的方式:直接声明属性类型
这种写法完全遵循PEP 484的存根规范,直接在类里声明属性的类型,省略getter和setter的注解:
class test: _foo: int foo: int # 直接声明属性类型,同时涵盖读、写的类型约束 def __init__(self) -> None: ...
类型检查工具(包括PyCharm)会自动识别foo是可读可写的int类型,setter的参数自然是int,返回None也完全符合Python的默认规范,不会再报错。
2. 保留@property结构的方式:只写getter注解
如果你希望存根文件和实际代码的结构更贴近,可以只保留getter的@property注解,省略setter部分:
class test: _foo: int def __init__(self) -> None: ... @property def foo(self) -> int: ...
这种情况下,PyCharm会通过getter的返回类型推断出属性的类型,同时默认认可setter的参数为int、返回None的行为,错误提示自然就消失了。
你之前尝试把getter的返回类型改成int | None虽然能消除错误,但其实不符合实际逻辑(你的getter本来只会返回int),所以用上面两种写法才是更合理的解决方案。
备注:内容来源于stack exchange,提问作者JMP
相关产品推荐
相关产品推荐

