对于自然包含其自身其他实例列表的类,在Python类型注释中进行注释以使子类起作用的正确方法是什么。
为了提供具体讨论的内容,下面是一个使用基树类型和子类的示例。
from typing import List, Optional, TypeVar
T = TypeVar('T', bound='TreeBase')
class TreeBase(object):
def __init__(self : T) -> None:
self.parent = None # type: Optional[T]
self.children = [] # type: List[T]
def addChild(self : T, node : T) -> None:
self.children.append(node)
node.parent = self
class IdTree(TreeBase):
def __init__(self, name : str) -> None:
super().__init__()
self.id = name
def childById(self : 'IdTree', name : str) -> Optional['IdTree']:
for child in self.children:
if child.id == name: # error: "T" has no attribute "id"
return child # error: Incompatible return value type (got "T", expected "Optional[IdTree]")
return None
我在mypy版本0.600(默认为pip3)和0.650(来自github的最新版本)中遇到错误。
指定此方法的正确方法是什么?
答案 0 :(得分:0)
尝试使整个类public Texture2D(int width, int height, TextureFormat textureFormat = TextureFormat.RGBA32, bool mipChain = true, bool linear = false);
的类型为var。
我也不认为您需要在Generic
中对self
进行注释,因为您不是从这些方法中返回它,也不是以其他方式使用它。
TreeBase