三行代码  ›  专栏  ›  技术社区  ›  jpo38

Python:打字,如何使用来自另一个内部类的内部类?

  •  0
  • jpo38  · 技术社区  · 3 周前

    是否可以将内部类函数的参数指定为另一个内部类的类型?

    class MyClass():
        
        class InnerClass1():
            pass
            
        class InnerClass2():
            def func(self, param: InnerClass1):
                pass
            
    if __name__ == '__main__':
        obj = MyClass()
    

    此报告 NameError: name 'InnerClass1' is not defined

    使用 param: MyClass.InnerClass1 报告 NameError: name 'MyClass' is not defined

    如果这不可能,正确声明参数类型的替代方法是什么?

    1 回复  |  直到 3 周前
        1
  •  1
  •   John Keyes    3 周前

    您可以通过字符串引用类型:

    class MyClass():
        
        class InnerClass1():
    
            @property
            def name(self) -> str:
                return "name"
            
        class InnerClass2():
            def func(self, param: "MyClass.InnerClass1"):
                pass
            
    if __name__ == '__main__':
        obj = MyClass()
    
    

    这显示VS代码自动完成为 param :

    VS Code autocomplete for property of an inner class