Введите подсказку для экземпляра подкласса - PullRequest
0 голосов
/ 26 апреля 2019

Я хочу разрешить подсказки типов с использованием Python 3 для принятия экземпляров, которые являются дочерними для данного класса.Я использую модуль forcece, чтобы проверить типизацию функции.Например:

import abc
class A(metaclass=abc.ABCMeta)
      pass
class B(A)
      def __init__(self,a)
      self.a = a
      pass
x = B(3)

@enforce.runtime_validation
def function(x:A)
     print(x.a)

, но кажется, что python 3 не поддерживает этот синтаксис, возвращая:

Аргумент 'x' не был типа <класс 'A'>,Фактический тип был B.

Любая помощь?

1 Ответ

0 голосов
/ 26 апреля 2019

По умолчанию принудительное применение применяет проверку инвариантного типа. Тип должен соответствовать напрямую - или выдается ошибка.

Для того чтобы экземпляр подкласса был принят, режим можно изменить на ковариантный, добавив:

enforce.config({'mode ': 'covariant'})

в точке кода, которая выполняется перед выполнением какой-либо проверки типа (т. Е. Около начала).

Доступны другие режимы, как описано в документации.

Для получения дополнительной информации см .: https://github.com/RussBaz/enforce

...