我想 python 3.7 附带了(不确定),不仅可以将变量名传递给函数,还可以传递变量的类型。我想知道的是是否有可能传递特定类的类型。
以同样的方式传递:
def foo_func(i: int) -> None:
pass
如果我有一个类,让我们说:
class foo_class(object):
pass
我如何转换
foo_func
接收
foo_class
而不是
int
类型?
此外,如果 foo_class 是另一个类的继承,我可以从父类强加一个更通用的类型吗?例如,如果我有,
class A(foo_class):
pass
class B(foo_class):
pass
我如何根据其父级传递
A
或
B
?
我的意思是:
def foo_func(obj: foo_class_type) -> None:
pass
foo_func(A())
foo_func(B())
当然,以下是使用 Python 类型提示将类作为参数传递到函数的方法:
class FooClass:
pass
class A(FooClass):
pass
class B(FooClass):
pass
# 要将 FooClass 类型的对象作为参数传递,请执行以下操作:
def foo_func(obj: FooClass) -> None:
pass
# 现在你可以传递 FooClass 的任何实例,包括 A 或 B
foo_func(FooClass())
foo_func(A())
foo_func(B())
在本例中,类型提示
obj: FooClass
指示
foo_func
预计会收到
FooClass
类型的对象。 由于
A
和
B
都继承自
FooClass
,因此也可以作为参数传递。
还可以使用
typing
模块中的
Type
来指示希望函数接收一个类型本身,而不是该类型的实例。 例如:
from typing import Type
def create_instance(class_type: Type[FooClass]) -> FooClass:
"""创建并返回给定类的实例。"""
return class_type()
my_a = create_instance(A) # my_a 现在是 A 的实例
在本例中,
create_instance
函数预计会收到一个与
FooClass
兼容的类型,并返回该类型的实例。
请记住,Python 中的类型提示仅仅是提示,并不会在运行时强制执行。 但是,它们对于文档目的以及与 MyPy 等静态分析工具一起使用以在运行代码之前捕获类型错误非常有用。
标签:python,class,python-3.7,python-typing From: 55751368