如何使用泛型在Python中返回类的类型?

8 浏览
0 Comments

如何使用泛型在Python中返回类的类型?

我正在使用泛型在python中创建一个类似java列表的List类。节点类也是泛型的,我正在为prev和next节点创建getter和setter方法。我想知道如何返回一个类似节点类本身的类型?\n这是我的进展:\n

from typing import Generic, TypeVar
T = TypeVar('T')
class Node(Generic[T]):
    '''泛型类Node,用于模拟链表中的节点。'''
    
    def __init__(self, element: T) -> None:
        '''构造函数。它接收一个类型为T的元素。'''
        self.element = element
        self.next = None
        self.prev = None
    
    def get_item(self) -> T:
        '''返回节点中的元素。'''
        return self.element
    
    def get_prev(self) -> #在这里应该返回什么类型呢?:
        '''返回前一个节点。'''
        return self.prev
    
    def get_next(self) -> #在这里应该返回什么类型呢?:
        '''返回下一个节点。'''
        return self.next
    
    def set_prev(self, prev) -> None:
        '''将前一个元素更改为指定的节点。'''
        self.prev = prev
    
    def set_next(self, next) -> None:
        '''将下一个元素更改为指定的节点。'''
        self.next = next

\n我尝试过使用以下代码:\n

def get_prev(self) -> Node[T]:
    '''返回前一个节点。'''
    return self.prev
    
def get_next(self) -> Node[T]:
    '''返回下一个节点。'''
    return self.next

\n但是它给我报了个错误:\n

错误追踪(最近的调用最先):
  文件 "List.py", 行 5, 在 
    class Node(Generic[T]):
  文件 "List.py", 行 18, 在 Node
    def get_prev(self) -> Node[T]:
NameError: name 'Node' is not defined

0
0 Comments

最新的Python版本具有通过泛型返回类类型的能力。在旧的Python版本中(包括3.7),可以通过添加

from __future__ import annotations

来实现。详情请参见https://peps.python.org/pep-0563/#enabling-the-future-behavior-in-python-3-7

0