python – 未在类型注释中定义的名称

python – 未在类型注释中定义的名称,第1张

概述我正在创建一个 python线性代数模块,用于娱乐和练习语言.我最近尝试向模块添加类型注释,如下所示: class Vector: # Various irrelevant implementation details def __add__(self, other: Vector) -> Vector: # More implementation detail 我正在创建一个 python线性代数模块,用于娱乐和练习语言.我最近尝试向模块添加类型注释,如下所示:

class Vector:     # VarIoUs irrelevant implementation details     def __add__(self,other: Vector) -> Vector:        # More implementation details....

但是,当我尝试导入它时,会吐出一个nameError:名称’Vector’未定义.我承认这个问题已经以here的形式得到了回答,但它似乎并没有完全为我的情况提供答案.

我想知道的是什么:

>我在这个文件中字面上定义了这个类.为什么说这个名字没有定义?
>如何以可以用于注释(作为类型)的方式定义Vector?

解决方法 你有前瞻性声明;函数(作为方法绑定)是在类之前创建的,因此名称Vector尚不存在.只有当所有类主体都已执行时,Python才能创建类对象并将名称Vector绑定到它.

只需使用带有名称的字符串:

class Vector:     # VarIoUs irrelevant implementation details     def __add__(self,other: 'Vector') -> 'Vector':        # More implementation details....

这不会影响IDE查看声明的方式;加载整个模块后,将查找字符串,并在当前上下文中将其解析为有效的Python表达式.由于在加载整个模块后类Vector存在,因此可以将字符串’Vector’正确转换为类对象.

另见specification on forward references:

When a type hint contains names that have not been defined yet,that deFinition may be expressed as a string literal,to be resolved later.

[…]

The string literal should contain a valID Python Expression […] and it should evaluate without errors once the module has been fully loaded.

总结

以上是内存溢出为你收集整理的python – 未在类型注释中定义的名称全部内容,希望文章能够帮你解决python – 未在类型注释中定义的名称所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1191097.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存