在类A的方法中,对类型为A的参数进行类型提示。

9 浏览
0 Comments

在类A的方法中,对类型为A的参数进行类型提示。

我正在尝试在Python 3.5.1中使用类型提示,使用以下代码:\n

>>> class A:                         
...     def a(self, i: int, b: A):   
...         pass                     
...                                  
Traceback (most recent call last):   
  File "", line 1, in 
  File "", line 2, in A       
NameError: name 'A' is not defined   

\n我猜这是作用域的问题,即在解析类型A时,类型A尚未完全构建,但我无法理解为什么这样的语法不可行。有没有其他的表达方式或者这是一个不合法的结构?\n我希望在基类中使用这种语法提示,可以构建树状层次的派生类。

0
0 Comments

问题出现的原因是方法a中的参数b的类型标注为'A',但是在当前的作用域中找不到类型为A的定义。解决方法是使用引号将类型标注为字符串,或者在类A的定义之前先定义A类。下面是整理后的文章:

在Python中,我们可以使用类型提示(type hint)来指定函数或方法的参数和返回值的类型。然而,有时候我们可能会遇到一个问题,就是在方法的参数类型标注中使用了当前作用域中尚未定义的类型。这个问题的解决方法是使用引号将类型标注为字符串,或者在当前作用域之前先定义该类型。

例如,我们有一个类A,其中有一个方法a,该方法有两个参数,一个是整数i,另一个是类型为A的参数b。我们可以在方法a的参数类型标注中使用'A'来表示参数b的类型。然而,如果在当前的作用域中找不到类型为A的定义,就会出现问题。

为了解决这个问题,我们可以将参数b的类型标注改为字符串形式的'A',即使用引号将类型标注起来。这样,Python解释器就不会去查找当前作用域中是否有类型为A的定义,而是将其作为普通的字符串处理。

另一种解决方法是在当前作用域中先定义A类,然后再定义方法a。这样,当解释器解析方法a的参数类型标注时,就能够找到类型为A的定义,从而避免出现问题。

总之,当在方法的参数类型标注中使用了当前作用域中尚未定义的类型时,我们可以通过将类型标注改为字符串形式或者先定义该类型来解决这个问题。这样,我们就能够正确地使用类型提示来进行代码开发。

0