Я определил свое собственное расширение 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
этого не происходит. Любая идея, как я могу это исправить? Я не хочу отключать проверку, поскольку она полезна в большинстве случаев.