Python:指定相同的通用参数类型

时间:2018-08-07 14:38:50

标签: java python generics nodes

我开始从Java学习Python。我想用Java编写类似于以下代码的Python代码:

public BinaryNode(T nodeData, BinaryNode<T> leftChild, BinaryNode<T> rightChild) {}

这是我到目前为止尝试过的:

from typing import TypeVar

T = TypeVar('T')
class BinaryNode:

    def __init__(self, nodeData : T, leftChild : BinaryNode = None,
             rightChild : BinaryNode = None):
          self.nodeData = nodeData
          self.leftChild = leftChild
          self.rightChild = rightChild

我应该如何指定传递给__init__的BinaryNodes与nodeData具有相同的类型参数?感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

Python使用Duck-Typing

您不需要指定类型。它将在运行时解决。

实际上,在Python中,您可以处理对象。因此,如果您将BinaryNodes处理为与nodata相同的类型,并且在某些情况下不是这样,则将发生错误,如果可能,应进行处理。

答案 1 :(得分:0)

好的,我想我想出了解决方法:

class BinaryNode:

    def __init__(self, nodeData = None, leftChild = None,
                 rightChild = None):
        if leftChild is not None:
            try:
                assert leftChild.getData().type() is nodeData.type()
            except:
                print("Error: left child is not of proper type")
                exit()
        if rightChild is not None:
            try:
                assert rightChild.getData().type() is nodeData.type()
            except:
                print("Error: right child is not of proper type")
                exit()
        self.nodeData = nodeData
        self.leftChild = leftChild
        self.rightChild = rightChild

    def getData(self):
        return self.nodeData

我认为这是最好的方法,因为异常是在运行时处理的。