Есть ли способ обойти правило проверки типов при использовании определенного класса? [закрыто]Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Есть ли способ обойти правило проверки типов при использовании определенного класса? [закрыто]

Сообщение Anonymous »

Я пытаюсь автоматически реализовать унаследованные абстрактные методы, используя метакласс в Python. Мне это удалось, и он работает правильно.
Однако VSCode отображает ошибку reportAbstractUsage в момент создания экземпляра класса.
ниже приведен код, поднимающий проблему

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

from abc import ABC, ABCMeta, abstractmethod

class MyBaseClass(ABC):
@abstractmethod
def base_foo(self):
pass

class Meta(ABCMeta):
def __new__(cls, name, bases, attrs):
for base in bases:
if issubclass(base, ABC):
for attr_name, attr_value in base.__dict__.items():
if attr_name in attrs:
attrs[attr_name] = cls.deco(attrs[attr_name])
elif getattr(attr_value, "__isabstractmethod__", False):
attrs[attr_name] = cls.deco(cls.default_method(attr_name))
return super().__new__(cls, name, bases, attrs)

@classmethod
def deco(cls, func):
def wrapper(*args, **kwargs):
print(f"Before calling {func.__name__}")
result = func(*args, **kwargs)
print(f"After calling {func.__name__}")
return result
return wrapper

@classmethod
def default_method(cls, method_name):
def default(*args, **kwargs):
print(args)
print(kwargs)
print(f"{method_name} is not implemented.")
return default

class MyDerivedClass(MyBaseClass, metaclass=Meta):
pass

a = MyDerivedClass()
a.base_foo()
Несмотря на то, что эта проблема не влияет на среду выполнения, я хотел бы устранить эту ошибку, как показано ниже (просто добавив комментарий «type: ignore [reportAbstractUsage]»)

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

from abc import ABC, ABCMeta, abstractmethod

class MyBaseClass(ABC):
@abstractmethod
def base_foo(self):
pass

# type: ignore [reportAbstractUsage]
class Meta(ABCMeta):
def __new__(cls, name, bases, attrs):
for base in bases:
if issubclass(base, ABC):
for attr_name, attr_value in base.__dict__.items():
if attr_name in attrs:
attrs[attr_name] = cls.deco(attrs[attr_name])
elif getattr(attr_value, "__isabstractmethod__", False):
attrs[attr_name] = cls.deco(cls.default_method(attr_name))
return super().__new__(cls, name, bases, attrs)

@classmethod
def deco(cls, func):
def wrapper(*args, **kwargs):
print(f"Before calling {func.__name__}")
result = func(*args, **kwargs)
print(f"After calling {func.__name__}")
return result
return wrapper

@classmethod
def default_method(cls, method_name):
def default(*args, **kwargs):
print(args)
print(kwargs)
print(f"{method_name} is not implemented.")
return default

class MyDerivedClass(MyBaseClass, metaclass=Meta):
pass

a = MyDerivedClass()  # no reportAbstractUsage error
a.base_foo()
Я понимаю, что отключение его построчно везде, где создается экземпляр класса, — это один из способов справиться с этим. Однако я бы предпочел более автоматическое решение, которое не требует добавления комментария каждый раз, когда я использую класс.
Поэтому я ищу способ игнорировать 'reportAbstractUsage ' ошибка везде, где создается экземпляр класса.
Я просмотрел документацию Pyright и проконсультировался с ChatGPT, но пока не нашел решения. Любая помощь будет оценена по достоинству.

Подробнее здесь: https://stackoverflow.com/questions/787 ... lass-is-ut
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Есть ли способ обойти правило проверки типов при использовании определенного класса?
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Правило цены каталога Magento и правило корзины — количество равно или больше 1
    Гость » » в форуме Php
    0 Ответы
    145 Просмотры
    Последнее сообщение Гость
  • Подсказки типов и проверка типов для пользовательских типов IntEnum
    Anonymous » » в форуме Python
    0 Ответы
    71 Просмотры
    Последнее сообщение Anonymous
  • Подсказки типов и проверка типов для пользовательских типов IntEnum
    Anonymous » » в форуме Python
    0 Ответы
    37 Просмотры
    Последнее сообщение Anonymous
  • Подсказки типов и проверка типов для пользовательских типов IntEnum
    Anonymous » » в форуме Python
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous

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