Python 如何定义参数的类型提示(参数的值是一个类,所有期望值都是某个类的子类)?
我想定义一个函数。它有一个值为类的参数。但并非所有类都是预期的,只能传递某个类的某些子类 我不知道是否可以使用类型提示来实现这个期望 如果有,我怎么做 据我所知,类型提示仅在需要值是某个类型的实例时才有帮助。而且相关的文件也很差Python 如何定义参数的类型提示(参数的值是一个类,所有期望值都是某个类的子类)?,python,python-3.x,arguments,subclass,typehints,Python,Python 3.x,Arguments,Subclass,Typehints,我想定义一个函数。它有一个值为类的参数。但并非所有类都是预期的,只能传递某个类的某些子类 我不知道是否可以使用类型提示来实现这个期望 如果有,我怎么做 据我所知,类型提示仅在需要值是某个类型的实例时才有帮助。而且相关的文件也很差 类MyClass(对象): 通过 def my_功能(参数): #arg应该是MyClass的子类。 回来 我只希望我的函数的定义产生与类型hint相同的效果(唯一的区别是普通类型hint show value是某个类的实例,这里我希望它show value是某个类的
类MyClass(对象):
通过
def my_功能(参数):
#arg应该是MyClass的子类。
回来
我只希望我的函数的定义产生与类型hint相同的效果(唯一的区别是普通类型hint show value是某个类的实例,这里我希望它show value是某个类的子类).如果您试图说
arg
必须是MyClass
或MyClass
的某个子类型的实例,请执行以下操作:
class MyClass(对象):通过
班级儿童(MyClass):通过
定义my_函数(arg:MyClass)->无:
通过
my_函数(MyClass())#类型检查
my_函数(Child())#类型检查
my_函数(3.14)#不进行类型检查
如果您试图说
arg
必须是MyClass
类对象或子类型,请使用typing.Type
:
从键入导入类型
#…剪断。。。
def my_function_2(arg:Type[MyClass])->None:
通过
my_函数_2(MyClass)#类型检查
my_function_2(儿童)#类型检查
my_function_2(int)#不进行类型检查
my_函数_2(MyClass())#不进行类型检查
当然,类型检查器无法准确地判断函数本身使用的子类型
类型提示仅在要求值是特定类型的实例时才有帮助
这其实不是你能做的。不可能构造一个类型提示来断言某些值必须恰好是一个类型,而不是该类型的任何子类型(尽管您通常可以通过使用泛型来模拟类似的类型)
类型提示总是指示某个值是该类型的实例或某个子类型
而且相关的文件也很差
如果你还没有找到它们,你可能会发现阅读它们很有用
Mypy是一个符合PEP 484的静态类型检查器,与PEP 484本身并行开发。(例如,mypy核心开发人员编写了PEP 484和其他一些与打字相关的PEP。)
结果是mypy的文档通常比官方Python文档更有助于打字。Hi@AudraJacot,在执行任何其他操作之前,您是否尝试过使用
issubclass(class,classinfo)
检查arg是否是MyClass的子类。这可能会对你有所帮助你的论点是什么意思?你是指一个实际的类对象还是一个给定类的实例?@eapetcho,它不是一个类型注释,是python的一个相对较新的补充,它是一个运行时类型check@eapetcho,我知道这一点,但这不是我的目标。类型提示对于IDE非常友好,比如PyCharm。。。它可以在编程时为程序员提供一些交互式反馈。@juanpa.arrivillaga,一个实际的类对象。我相信他们想暗示它将是一个子类型,我最初认为它将指示一个绑定类型变量,T=TypeVar(T,bound=MyClass)
,但我相信这也会接受MyClass
对象,而OP似乎只希望接受子类型。