Можете ли вы выполнить проверку типа в вызываемой функции?Python

Программы на Python
Anonymous
Можете ли вы выполнить проверку типа в вызываемой функции?

Сообщение Anonymous »

Я хочу иметь возможность вызывать функцию и сообщать вызывающей стороне, что тип параметра проверен. Моя проверка типов — это Pyright через расширение Pylance в vscode с включенным «базовым» уровнем проверки типов.
Код
Пример класса заглушки

Код: Выделить всё

@dataclass()
class Personnel:
person: Person
employee: Optional[Employee]

@dataclass()
class Employee:
department: str
jobs: list[Job]
Текущая реализация
Текущий шаблон, который я использую для получения всех должностей для каждого сотрудника, выглядит следующим образом:

Код: Выделить всё

all_jobs = [
job
for personnel in all_personnel_list if personnel.employee is not None
job for job in personnel.employee.jobs
]
Моя программа проверки типов не жалуется на доступ кpersonal.employee.jobs, даже несмотря на то, чтоpersonal.employee является необязательным, поскольку тип проверен в операторе if.
Желаемая реализация
Я хотел бы иметь возможность сделать что-то вроде этого:

Код: Выделить всё

def is_employee(x: Personnel):
return x.employee is not None

all_jobs = [
job
for personnel in all_personnel_list if is_employee(personnel)
job for job in personnel.employee.jobs
]
Проблема, с которой я столкнулся, заключается в том, что моя программа проверки типов выдает ошибку, когда я пытаюсь это сделать, потому что она считает, чтоpersonal.employee.jobs все еще является необязательным
code> и предупреждает меня, что я не обрабатываю случай, когдаpersonal.employee имеет значение None. Я понимаю, что использовать этот вспомогательный метод для такого простого примера кажется немного глупым, но мой фактический вариант использования будет использовать более сложные вспомогательные методы, и я бы хотел, чтобы они имели описательные имена, а не были цепочкой из и заявлений.
Я также не совсем уверен, как формально описать эту проблему, поэтому прошу прощения, если это дубликат.

Подробнее здесь: https://stackoverflow.com/questions/786 ... d-function

Вернуться в «Python»