代码如下:
class A:
def __init__(self,a:A):
pass
Python 版本(Anaconda):Python 3.7.0 (default, Jun 28 2018, 08:04:48) [MSC v.1912 64 bit (AMD64)] on win32
这段代码运行时就会触发NameError:name 'A' is not defined
异常。那么这个异常的引发是因为解释器本身的限制还是因为写法有误?我查阅官方文档(PEP 3107)后并未找到有关内容。毕竟这样的需求还是经常有的,比如一个容器类的元素应该可以是这个类的实例。谢谢!
1
Mohanson 2019-02-10 15:51:06 +08:00 via Android 1
对的,使用 a: 'A' 即可: 注解类型加单引号。
|
2
Mohanson 2019-02-10 15:52:45 +08:00 via Android 1
|
3
fourstring OP @Mohanson #1 那这样的话您使用的 ide 会有代码提示吗?我用的 PyCharm 2018.3 似乎在接下来的编码中并不会提示我 a 是一个 A 类型的变量(比如输入 a.不会提示成员)
|
4
fourstring OP @Mohanson #1 不好意思打扰了,我刚刚的问题在于对 A 的内部类 B 进行注解的时候没有使用'A.B',而是使用了'B',最后请教一些单引号注释类型是在何处规定的呢?
|
5
Mohanson 2019-02-10 16:03:14 +08:00 via Android
@fourstring 目前是没有的
|
6
Trim21 2019-02-10 16:05:13 +08:00 1
|
7
Mohanson 2019-02-10 16:09:00 +08:00 via Android 1
|
8
Mohanson 2019-02-10 16:11:37 +08:00 via Android
因为官方都是这么用,我其实也没细究原始出处
|
9
thautwarm 2019-02-10 16:16:09 +08:00 2
from __future__ import annotations
就可以了。 不默认支持是因为这个会 break 一些特殊的包。 |
10
CSM 2019-02-10 23:03:49 +08:00 via Android 1
|