PyCharm 键入警告抽象基类不一致

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

在以下代码中,PyCharm 对

Base.foo
发出键入警告(“预期返回 'int',没有返回”),但对
Base.bar
不发出键入警告,它具有完全相同的键入提示和返回类型:

import abc

class Base(abc.ABC):
    @abc.abstractmethod
    def foo(self) -> int:
        print('fooing')
        pass

    @abc.abstractmethod
    def bar(self) -> int:
        pass

class Derived(Base):
    def foo(self) -> int:
        return 42

    def bar(self) -> int:
        return 42

实际上,

Base.foo
Base.bar
都不能直接调用,所以我希望那里不会出现任何输入警告。另一方面,如果在
return super().foo()
中输入
Derived.foo
,那么确实应该发出打字警告,但同样的情况也应该适用于
Derived.bar
,所以我仍然不明白为什么会有不同的行为。有人可以解释一下,还是这是 PyCharm 中的一个错误?

python inheritance pycharm typing abc
1个回答
0
投票

Base.foo
can 可以从
foo
的其他正确覆盖中调用。您的类型检查器不会跟踪代码的执行以确保
Base.foo
isn't 被调用:您可以拥有类似

的代码
class Derived2(Base):
    def foo(self) -> int:
        return 42 + super().foo()

需要

Base.foo
返回
int

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