Pycharm: ошибка типа при расширении поля в Django - PullRequest
0 голосов
/ 02 марта 2020

Я определил свое собственное расширение FloatField для добавления атрибутов единиц следующим образом:

class MetricFloatField(models.FloatField):
    """
    Implements a Float Field for quantities in the Metric System, with a unit and a unit multiplier
    """
    def __init__(self, unit_prefix="", unit="", *args, **kwargs):
        self.unit_prefix = unit_prefix
        self.unit = unit
        super().__init__(*args, **kwargs)

    def deconstruct(self):
        unit_prefix, unit, args, kwargs = super().deconstruct()
        if not self.unit_prefix == "":
            kwargs['unit_prefix'] = self.unit_prefix
        if not self.unit == "":
            kwargs['unit'] = self.unit
        return unit_prefix, unit, args, kwargs

Это работает отлично, но меня раздражает, что Pycharm не распознает типы, например

class CylindricalComponent(Models.model):
    thickness = MetricFloatField(default=0.0, unit=unit.m)
    length = MetricFloatField(default=0.0, unit=unit.m)
    inner_diameter = MetricFloatField(default=0.0, unit=unit.m)
    outer_diameter = MetricFloatField(default=0.0, unit=unit.m)
    @property
    def volume(self):
        return (pow(self.outer_diameter / 2, 2) - pow(self.inner_diameter / 2, 2)) * np.pi * self.length

В математических операциях он дает мне:

Ожидаемый тип int, вместо него получено значение MetricFloatField. Информация проверки: эта проверка обнаруживает ошибки типа в выражениях вызова функции. Благодаря динамической диспетчеризации c и типизированию утки это возможно в ограниченном, но полезном количестве случаев. Типы параметров функции могут быть указаны в строках документации или в аннотациях функций Python 3.

При использовании стандарта FloatField этого не происходит. Любая идея, как я могу это исправить? Я не хочу отключать проверку, поскольку она полезна в большинстве случаев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...