如何为类的动态创建属性添加类型提示?
解决动态创建属性的类型提示问题
首先修正你代码里的语法错误:lambda self: return n写法无效,lambda表达式不需要显式return,直接写返回值即可,改成lambda self: n。
针对类型提示的问题,有几种可行的解决方式:
方法1:用cast强制类型转换
通过typing.cast告诉类型检查器,这个property实例对应实际访问时的int类型:
from typing import cast, property def property_factory(n: int) -> property: getter = lambda self: n return property(getter) class Foo: number: int = cast(int, property_factory(1))
方法2:指定泛型Property类型(推荐)
Python 3.10+的typing模块提供了Property泛型,可以明确标注property对应的返回值类型,让类型检查器准确识别:
from typing import Property def property_factory(n: int) -> Property[int]: getter = lambda self: n return property(getter) class Foo: number: Property[int] = property_factory(1)
这样访问Foo().number时,类型检查器会自动识别为int类型,完全符合实际行为。如果是Python 3.9及以下版本,安装typing_extensions库后,从typing_extensions import Property即可使用。
方法3:直接使用@property装饰器(非动态场景)
如果不需要动态生成property的场景,也可以直接在类内用标准的@property写法,天然自带正确的类型提示:
class Foo: @property def number(self) -> int: return 1
内容的提问来源于stack exchange,提问作者Jammin2
相关产品推荐
相关产品推荐

