带有子类和类列表的Python类型注释

时间:2018-12-08 01:02:41

标签: python python-3.x typehints

对于自然包含其自身其他实例列表的类,在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的最新版本)中遇到错误。

指定此方法的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

尝试使整个类public Texture2D(int width, int height, TextureFormat textureFormat = TextureFormat.RGBA32, bool mipChain = true, bool linear = false);的类型为var。

我也不认为您需要在Generic中对self进行注释,因为您不是从这些方法中返回它,也不是以其他方式使用它。

TreeBase