当前位置: 首页 > 知识库问答 >
问题:

Python 3.6类型:在赋值前使用变量[重复]

杨星纬
2023-03-14

新的打字/暗示/作业方式很酷,但我不知道如何让这么简单的事情起作用:

class MyContainer:
    def addMyItem(self, item:MyItem):
        pass

class MyItem:
    def __init__(self, container:MyContainer):
        pass

它抛出一个错误:赋值之前使用变量“MyItem”。到目前为止,我发现的最好但非常丑陋的解决方法是:

class MyContainer:
    def addMyItem(self, untypeditem):
        item:MyItem=untypeditem
        pass

class MyItem:
    def __init__(self, container:MyContainer):
        pass

请告诉我,具有#1原则美丽胜于丑陋的语言有更好的东西来解决这个常见的打字问题

共有1个答案

孙鑫鹏
2023-03-14

前向引用只是引用名称的字符串(因为它在模块中可见)。

class MyContainer:
    def addMyItem(self, item: 'MyItem'):
        pass

class MyItem:
    def __init__(self, container: 'MyContainer'):
        pass

如果您需要从其他地方导入名称(并且您只需要用于类型检查的名称,或者如果它可能导致循环导入),则可以使用

import typing

if typing.TYPE_CHECKING:
    from foo import Thing

TYPE_CHECKING仅当类型检查器正在运行时才为真(即,您的代码未被评估以执行)。

 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 从父函数分配给变量:“分配前引用的局部变量” [重复] (5个答案) Python 3:UnboundLocalError:分配前被引用的局部变量[重复] (5个答案) 10个月前关闭。 我收到以下错误: UnboundLocalError:分配前已引用局部变量“ test1”。 错误说那是局部变量,但我认为这个变量是全局变量 那么它是全局的还是局部的,

  • = 赋值操作符(它的左右两边不能有空白符) 不要搞混了 = 和 -eq,-eq 是比赋值操作更高级的测试。注意:等于号(=)根据环境的不同它可能是赋值操作符也可能是一个测试操作符。 例子 4-2. 简单的变量赋值 1 #!/bin/bash 2 # 裸变量 3 4 echo 5 6 # 什么时候变量是“裸”的?比如说,变量名前面没有$? 7 #当变量被赋值

  • 本文向大家介绍详解PHP变量传值赋值和引用赋值变量销毁,包括了详解PHP变量传值赋值和引用赋值变量销毁的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了PHP变量传值赋值和引用赋值变量销毁的具体代码,供大家参考,具体内容如下 php中,上面的代码,变量是怎么存放的呢? 上面的代码变动下,将变量b赋值给变量a,会发生什么? 问题来了,$a = $b,那么是将变量a的指针指向了变量b指针所

  • 我想把列表中的对象分配给类变量。 感恩节:)

  • 我的代码是这样的: 但最后一句话: 总是停止编译说我需要给新变量分配一个返回值?在if语句之前,已经为k分配了一个值。当我把随机k语句放在if语句中时,它似乎是有效的,但这使得它毫无价值,不是吗?编辑器本身没有错误,但是当我编译时,它给了我这个: 线程“main”java中出现异常。lang.IndexOutOfBoundsException:索引:41,大小:36。util。ArrayList。