如何在Python中用变量值实现类型提示(求非泛型方案)
非泛型方案:给子类self.var添加精确类型提示
针对你的需求,这里提供几种非泛型的实现方式,让IDE的智能提示能正确识别self.var的类型:
方法1:在子类__init__中给实例变量加类型注解
直接在子类的构造方法里,给self.var显式标注类型,IDE会直接识别这个类型并给出提示:
class Class1: var1 = 1 class Class2: var2 = 2 class BaseClass: def __init__(self, var): self.var = var class ChildClass1(BaseClass): def __init__(self): super().__init__(var=Class1) self.var: type[Class1] # 标注self.var为Class1的类类型 def fun(self): self.var. # 此时IDE会提示var1 class ChildClass2(BaseClass): def __init__(self): super().__init__(var=Class2) self.var: type[Class2] # 标注self.var为Class2的类类型 def fun(self): self.var. # 此时IDE会提示var2
方法2:在子类中添加类级别类型注解
在子类的类体里直接标注var的类型,相当于告诉类型检查器该子类的所有实例中var属性的类型:
class Class1: var1 = 1 class Class2: var2 = 2 class BaseClass: def __init__(self, var): self.var = var class ChildClass1(BaseClass): var: type[Class1] # 类级别标注var的类型 def __init__(self): super().__init__(var=Class1) def fun(self): self.var. # 能正确提示Class1的var1 class ChildClass2(BaseClass): var: type[Class2] # 类级别标注var的类型 def __init__(self): super().__init__(var=Class2) def fun(self): self.var. # 能正确提示Class2的var2
方法3:在方法内用typing.cast做类型断言
如果只需要在特定方法里获得精确提示,可以使用cast显式转换类型,不影响其他场景的类型推断:
from typing import cast class Class1: var1 = 1 class Class2: var2 = 2 class BaseClass: def __init__(self, var): self.var = var class ChildClass1(BaseClass): def __init__(self): super().__init__(var=Class1) def fun(self): cls_var = cast(type[Class1], self.var) cls_var. # 这里会提示Class1的var1 class ChildClass2(BaseClass): def __init__(self): super().__init__(var=Class2) def fun(self): cls_var = cast(type[Class2], self.var) cls_var. # 这里会提示Class2的var2
内容的提问来源于stack exchange,提问作者ans98
相关产品推荐
相关产品推荐

