Однако 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()
Код: Выделить всё
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