Если self._type
является классом (а не экземпляром), вы можете вместо этого добавить к нему type
.type
- это по умолчанию метакласс в Python.
Pylint должен справиться с этим лучше - он знает, что вы можете вызвать класс для создания экземпляра.
class Thing:
def __init__(self, thing_type: type):
self._type: type = thing_type
self._value = None
@property
def value(self):
return self._value
@value.setter
def value(self, value):
self._value = self._type(value)
Обратите внимание, что я также включил переменную аннотацию, для которой требуется python 3.6.
Также обратите внимание, что если вы нигде не включите type.setter, python сам решит, что тип не может быть установлен.Если вы затем ссылаетесь на _type в своем конструкторе (что вы делаете прямо сейчас), то вы уже обойдете его, не устанавливая.
Редактирование: Я изменил value.setter, чтобы вместо него использовать self._type.Поскольку это частная переменная для экземпляра, это прекрасно для использования.Это останавливает появление точки E1102.
Удаление свойства type приведет к удалению E0601.Это связано с тем, что ваше свойство в пространстве имен класса скрывает глобальную переменную с именем type
.Если он определен, Pylint думает, что вы намереваетесь использовать свойство (которое в этот момент является экземпляром класса property
, а не свойством класса).