1 回答
TA贡献1735条经验 获得超5个赞
Protocol
可以使用。我在这里记录它是因为我发现这是一个很难搜索的主题;特别是检查属性是否存在。
为了确保属性的存在:
from typing import Protocol
class HasFoo(Protocol): # Define what's required
foo: int
class Foo: # This class fulfills the protocol implicitly
def __init__(self):
self.foo = 1
class Bar:
def __init__(self): # This class fails to implicitly fulfill the protocol
self.bar = 2
def foo_func(f: HasFoo):
pass
foo_func(Foo()) # Type check succeeds
foo_func(Bar()) # Type check fails
请注意 后面的类型提示foo。该行必须在语法上有效,并且类型必须与所检查属性的推断类型相匹配。typing.Any如果您关心 的存在foo而不是其类型,则可以用作占位符。
同样,检查方法也可以这样做:
class HasFoo(Protocol):
def foo(self):
pass
class Foo:
def foo(self):
pass
class Bar:
def bar(self):
pass
def func(f: HasFoo):
pass
func(Foo()) # Succeeds
func(Bar()) # Fails
类型检查是通过Pycharm 2020.2.2.
添加回答
举报