在python中是否可以限制python中的参数类型。我尝试使用输入中的List模块,但它仍然允许用户传递类对象或int参数,而不会给出错误。
from typing import List
class Job:
def __init__(self):
self.profit = 0
self.deadlines = 0
class JobsWithDeadlines:
def get_Job_Sequencing_with_deadlines(self, jobs: List[Job]):
print(type(jobs))
j = Job()
j.profit = 20
j.deadline = 2
obj = JobsWithDeadlines()
obj.get_Job_Sequencing_with_deadlines(1)发布于 2019-09-06 11:47:07
虽然类型注释是Python的一部分,但类型检查不是。注释用于启用外部静态类型检查。Python最常见的静态类型检查器是PyCharm编辑器和mypy。
“静态”意味着在程序运行之前捕获错误,只需分析源代码即可。除了explicit check之外,没有任何方法可以防止在运行时传递错误的对象。
发布于 2019-09-06 11:51:11
注释称为jobs:List[Job]。注释提供了一种为用户和IDE编写提示的方法。注释在运行时存储在函数对象中,但不会对实际代码施加任何类型的强制限制。
要强制执行限制,您必须手动检查它。例如,如果允许子类:
def get_Job_Sequencing_with_deadlines(self, jobs):
if not isinstance(jobs, list):
raise TypeError('non-list input')
print(type(jobs))如果您不想允许子类,请改用if type(jobs) is not list:。
检查列表中的每一项都同样令人痛苦:
if not all(isinstance(job, Job) for job in jobs):
raise TypeError('non-Job input')您几乎不想在Python中进行显式类型检查。这门语言在设计上基本上考虑到了鸭子类型的思想。这意味着应该允许那些行为方式符合您的需要,但不属于某些硬编码类层次结构的对象。从实际意义上讲,这是非常有意义的。如果它的行为像一个列表,你关心它不是吗?
https://stackoverflow.com/questions/57815388
复制相似问题