Python 联合 '|'不适用于用户定义类的类型提示[重复]

问题描述 投票:0回答:1

我最近发现了 typehints 并一直试图将它们包含在我的代码中。但是,当我在类的函数中使用它们时,我收到了 TypeErrors。

这是代表我面临的问题的代码片段:

class MyClass1:
    def __init__(self, ID: str) -> None:
        # Some code
        pass

    # More code follows

class MyClass2:
    def __init__(self, variables: 'MyClass1' | list['MyClass1']) -> None:
        self.variables: list['MyClass1'] = to_list(variables)

    # More code follows

我在

def __init__(self, variables: 'MyClass1' | list['MyClass1']) -> None:
行抛出错误“TypeError: unsupported operand type(s) for |: 'str' and 'types.GenericAlias'”。

这是输入提示用户定义类的错误方法吗?不确定我在这里做错了什么,但显然 Python 认为我正在尝试比较字符串和列表,而不仅仅是编写类型提示。

我使用的是Python 3.11.5版本以供参考。

tl;dr:我尝试使用用户定义类的类型提示和联合“|”符号并抛出 TypeError。

python python-3.x class typeerror type-hinting
1个回答
0
投票

如果已经定义了类型提示,则无需将其包装在字符串中:

class MyClass2:
    def __init__(self, variables: MyClass1 | list[MyClass1]) -> None:
        self.variables: list[MyClass1] = to_list(variables)

如果存在循环引用或类似的情况,这意味着您不能这样做,您也可以将整个内容用引号引起来:

class MyClass2:
    def __init__(self, variables: 'MyClass1 | list[MyClass1]') -> None:
        self.variables: list[MyClass1] = to_list(variables)

请注意,与函数注释或类注释不同,变量注释不需要包装在字符串中,因为它们永远不会被求值,并且无论如何都无法在运行时访问。

© www.soinside.com 2019 - 2024. All rights reserved.