gpt4 book ai didi

python - 在魔术方法中键入 'other' 的提示?

转载 作者:太空狗 更新时间:2023-10-30 00:55:09 27 4
gpt4 key购买 nike

class Interval(object):
def __sub__(self, other: Interval):
pass

我得到的是“NameError: name 'Interval' is not defined'。谁能告诉我这里哪种类型是正确的?

最佳答案

在 Python 执行完类 block 中的所有代码(包括您的方法定义)之前,该类不存在。

PEP 484 中所建议的,只需使用字符串文字即可:

class Interval(object):
def __sub__(self, other: 'Interval'):
pass

请注意,在方法中引用类是完全没问题的:

class Interval(object):
def __sub__(self, other: 'Interval'):
Interval.do_something()

只有当您需要在方法签名中或直接在类 block 中使用它时才会出现问题。


从 Python 3.7 开始,上述解决方法是 no longer necessary (但仍然完全有效,因此如果您需要支持旧版本的 Python,您可以而且应该继续使用它)。相反,将以下内容放在每个模块的顶部以在该模块内启用前向引用:

from __future__ import annotations

这将导致在查找时延迟评估所有注释,以便您可以在其定义中甚至在其定义之前引用类。简而言之,它使每个“合理”的注释都意味着您(可能)想要它的意思。

最后,如果您需要检查类型注释,请确保您使用的是 typing.get_type_hints()而不是 .__annotations__ 特殊属性。这个函数正确地处理了旧的和新的做事方式,以及类型提示规则的一些其他细微差别,例如当默认值为 None 时自动 Optional[T] 。这是检查附加到任意 Python 对象的类型提示的舒适且面向 future 的方法。

关于python - 在魔术方法中键入 'other' 的提示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30898998/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com