#python #properties #pycharm #annotations
#питон #свойства #pycharm #аннотации
Вопрос:
Итак, то, что я создал сначала, было моей собственной реализацией class-property. Он ведет себя как обычное свойство, но на самом деле применяется к классу:
class classproperty(property):
def __get__(self, cls, owner):
return classmethod(self.fget).__get__(None, owner)()
class A:
@classproperty
def f(cls):
return 1
Это работает просто отлично, но PyCharm выделяет cls
и говорит, что «Обычно первый параметр метода называется «self» «.
Вопрос в том, есть ли какой-либо способ сообщить PyCharm / interpreter, что @classproperty
это на самом деле своего рода classmethod
и что я хочу сохранить cls
в качестве имени для первого параметра?
Я пробовал устанавливать metaclass=classmethod
, но это вызвало TypeError: metaclass conflict
. Создание classproprty
для расширения обоих наследует оба property
, а classmethod
также дало мне TypeError: multiple bases have instance lay-out conflict
, что в некотором роде ожидаемо.
Так могу ли я обмануть его, заставив думать, что мой декоратор — это что-то вроде classmethod
?