我正在使用泛型在python中创建一个List类(类似于java列表的列表)。类节点也是通用的,我正在为上一个和下一个节点创建 getter 和 setters 方法。我想知道如何返回像类节点本身这样的类型?这是我的进步:
from typing import Generic, TypeVar
T = TypeVar('T')
class Node(Generic[T]):
''' Generic class Node. It models a node for a linked list. '''
def __init__(self, element: T) -> None:
''' Constructor. It recives an element of type T.'''
self.element = element
self.next = None
self.prev = None
def get_item(self) -> T:
''' Returns the item in the node.'''
return self.element
def get_prev(self) -> #What is the type I should return here?:
''' Returns the previous node.'''
return self.prev
def get_next(self) -> #What is the type I should return here?:
''' Return the next node.'''
return self.next
def set_prev(self, prev) -> None:
''' Changes the previous element to the specified node.'''
self.prev = prev
def set_next(self, next) -> None:
''' Changes the next element to the specified node.'''
self.next = next
我试过
def get_prev(self) -> Node[T]:
''' Returns the previous node.'''
return self.prev
def get_next(self) -> Node[T]:
''' Return the next node.'''
return self.next
但它给了我错误
Traceback (most recent call last):
File "List.py", line 5, in <module>
class Node(Generic[T]):
File "List.py", line 18, in Node
def get_prev(self) -> Node[T]:
NameError: name 'Node' is not defined
我认为最新的Python版本具有在类型注释中自引用类的能力(这里是当前正在定义的< code>get_prev的返回类型< code>Node)。
较旧的Python版本(低至3.7)仍然通过添加以下内容来支持它:
from __future__ import annotations
参见:https://peps.python.org/pep-0563/#enabling-未来的行动3-7
现在我希望以泛型的方式使用这些类。 如何从方法“method1”和“method2”返回泛型类型(可以是猫或狗)。我有几个返回“T extends Animal”的方法,所以最好在方法级别或类级别中声明泛型类型。
对于一堆带有泛型的包装类,我的继承结构遇到了一些麻烦。这基本上是结构: 这将与当前代码一起编译和工作,但是,这似乎很危险。如果调用方像这样使用这个方法:,它将很好地编译,但是如果findMiddle尝试返回SubBWrapper,则在运行时会有一个ClassCastException。我以为行得通却行不通的是: 所以我的问题基本上是,有没有正确的方法来编写编译、运行并遵循最佳实践的方法findMi
我试图创建一个返回泛型类型参数的方法。 我有一个类车辆订单扩展抽象类订单。在类订单中,我创建了一个抽象方法接收HiredObject。这个方法不会接收任何参数,并将返回一个泛型。 我在VehicleOrder类中实现了这个方法,并将其设置为返回类参数vehicle。 问题是,当我实例化一个新的VeilceOrderorororororororororororororderororororororo
类具有类似类型的方法(让我们称其为收集器)。我认为这些方法可以通过使其返回一个包装泛型值的类来实现。 这是示例代码 此代码产生错误 我知道我可以通过使用泛型值创建收集器类来解决这个问题。我希望Collector类是单例的,我是指bean。所以我不能这么做。 有办法吗?
我试图重写在子类中返回type as list的方法,如下例所示,由于泛型问题,我无法在子类中执行此操作。我无法更改我的超类代码,因此如何解决该问题?任何人都可以指引我。。。非常感谢。 无法更新的超类: 子类: