引用与函数参数类型相同的类。

12 浏览
0 Comments

引用与函数参数类型相同的类。

在Python 3.5中,添加了类型注释(请参见此处)。\n是否有一种定义递归类型注释的方法,例如用于树状结构?\n

class Employee(object):
    def __init__(self, name: str, reports: List[Employee]):
       self.name = name
       self.reports = reports

\n在上述代码中,似乎注释List[Employee]不起作用。运行代码会导致以下错误:\nNameError: name \'Employee\' is not defined

0
0 Comments

在Python中,有时候我们需要在一个类的方法签名中引用该类本身作为参数的类型。然而,在早期的Python版本中,这样的写法是不被允许的,会导致代码无法正常工作。

一个常见的情况是在定义容器类时,该类在一些方法的签名中被引用。例如,下面的代码是一个简单的二叉树实现的开始,但是无法正常工作:

class Tree:
    def __init__(self, left: Tree, right: Tree):
        self.left = left
        self.right = right

为了解决这个问题,我们可以使用前向引用(Forward References),在类型提示中使用字符串来引用该类本身:

class Tree:
    def __init__(self, left: 'Tree', right: 'Tree'):
        self.left = left
        self.right = right

在类型提示中使用字符串字面量作为类型引用是被允许的,例如:

class Tree:
    ...
    def leaves(self) -> List['Tree']:

需要注意的是,从Python3.10开始,这样的前向引用将不再需要,并且可以通过使用`from __future__ import annotations`来避免。具体可以参考Python官方文档中的相关说明(docs.python.org/3.8/library/__future__.html)。

需要注意的是,Python 3.10的类型提示变化导致了一些问题,但在3.10版本中已经无法撤销这些变化,因此有讨论再次更改的可能。可以参考PEP-649了解更多详细信息。

0