首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >告诉我我肯定知道返回参数的类型

告诉我我肯定知道返回参数的类型
EN

Stack Overflow用户
提问于 2021-04-30 11:04:48
回答 1查看 134关注 0票数 4

以下代码从类型中产生一个可以理解但却是错误的错误:

代码语言:javascript
复制
from typing import List, Union, Any

class classA():
    def __init__(self, name: str) -> None:
        self.__name = name

    def __eq__(self, other: Any) -> bool:
        if (type(self) == type(other)):
            return (self.name == other.name)
        return False

    @property
    def name(self) -> str:
        return self.__name


class classB():
    def __init__(self, id: int) -> None:
        self.__id = id

    def __eq__(self, other: Any) -> bool:
        if (type(self) == type(other)):
            return (self.id == other.id)
        return False

    @property
    def id(self) -> int:
        return self.__id


class classC():
    def __init__(self) -> None:
        self.__elements: List[Union[classA, classB]] = list()

    def add(self, elem: Union[classA, classB]) -> None:
        if (elem not in self.__elements):
            self.__elements.append(elem)

    def get_a(self, name_of_a: str) -> classA:
        tmp_a = classA(name_of_a)
        if (tmp_a in self.__elements):
            return self.__elements[self.__elements.index(tmp_a)]
        raise Exception(f'{name_of_a} not found')

    def get_b(self, id_of_b: int) -> classB:
        tmp_b = classB(id_of_b)
        if (tmp_b in self.__elements):
            return self.__elements[self.__elements.index(tmp_b)]
        raise Exception(f'{id_of_b} not found')

调用mypy --show-error-codes classes.py显示了以下输出:

代码语言:javascript
复制
classes.py:43: error: Incompatible return value type (got "Union[classA, classB]", expected "classA")  [return-value]
classes.py:49: error: Incompatible return value type (got "Union[classA, classB]", expected "classB")  [return-value]
Found 2 errors in 1 file (checked 1 source file)

如何告诉我函数get_a只会返回classA

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-30 12:49:24

您可以通过使用assert告诉mypy:

代码语言:javascript
复制
    def get_a(self, name_of_a: str) -> classA:
        tmp_a = classA(name_of_a)
        if (tmp_a in self.__elements):
            result = self.__elements[self.__elements.index(tmp_a)]
            assert isinstance(result, classA)
            return result
        raise Exception(f'{name_of_a} not found')
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67332809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档