让 mypy 识别对象具有属性

Get mypy to recognise that object has attribute

例如:

from typing import Union, List, TypeVar

foo: object

if hasattr(foo, 'bar'):
    print(foo.bar)

returns

main.py:6: error: "object" has no attribute "bar"
Found 1 error in 1 file (checked 1 source file)

但是,我们知道 foo 具有属性 bar,因为我们只是断言它 - 有什么方法可以告诉 mypy 这个吗?

您可以使用 Protocol 而不是 hasattr:

from typing import Protocol, runtime_checkable


@runtime_checkable
class HasBar(Protocol):
    bar: int


foo: object

if isinstance(foo, HasBar):
    print(foo.bar)