让 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)
例如:
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)