Как заставить проверку типов IDE распознавать динамически добавляемые методы из декоратора класса в Python?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как заставить проверку типов IDE распознавать динамически добавляемые методы из декоратора класса в Python?

Сообщение Anonymous »

Это мой код:

Код: Выделить всё

from typing import Type, TypeVar

T = TypeVar("T")

class NewMethodsMixin:
def new_method(self) -> str:
"""This is a new method added by a mixin."""
print("added by mixin")

def class_decorator(cls: Type[T]):
class Decorated(NewMethodsMixin, cls):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
cls.__init__(self, *args, **kwargs)

return Decorated

@class_decorator
class MyClass:
def old_method(self) -> str:
print("original method")

my_instance = MyClass()
my_instance.old_method()  # 'original method'
my_instance.new_method()  # 'added by mixin'
Вот как это выглядит в IDE:
1
Я хочу получить подсказки по типам для old_method.
А если я использую другой подход:

Код: Выделить всё

...

def class_decorator(cls: Type[T]) -> Type[T]:
...
Вот как это выглядит в IDE:
2
Теперь я получаю подсказку типа для old_method, но потеряю подсказку типа для new_method.
Если я использую Union:

Код: Выделить всё

...
def class_decorator(cls: Type[T]) -> Type[T] | Type[NewMethodsMixin]:
...
Вот как это выглядит в IDE:
3
Видимо, pylance или другие подсказки типов может правильно обработать декорированный класс, но если я унаследую новый класс, это приведет к сбою.
По некоторым причинам я предпочитаю использовать декораторы вместо использования наследования классов, поскольку мои пользователи могут этого не делать. уметь решать проблему множественного наследования. Есть ли здесь какое-нибудь решение?

Подробнее здесь: https://stackoverflow.com/questions/793 ... -a-class-d
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как заставить проверку типов IDE распознавать динамически добавляемые методы из декоратора класса в Python?
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Как заставить pylance распознавать заглушки типов
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Как заставить pylance распознавать заглушки типов
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Когда использовать фабрику декоратора и декоратора?
    Anonymous » » в форуме Python
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Когда использовать фабрику декоратора и декоратора?
    Anonymous » » в форуме Python
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»