Python: сохранить аннотацию ‘cls’ для реализации пользовательского метода классов

#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 ?