我正在Python使用该库编写代码YAML。我编写了一个代码,其中有一个类,ConstantHandler其中有一个函数record_constants接收需要加载到文件中的数据YAML。由于数据是从另一个传输的InjectorConstants,所以我通过抽象方法传输它record_date,一切似乎都很好,但PyCharm它给出了一个警告:Class InjectorConstants must implement all abstract methods。
如何修复它?程序代码:
from dataclasses import dataclass
from pathlib import Path
import yaml
from abc import ABC, abstractmethod
@dataclass(frozen=True)
class ConstantHandler(ABC):
configuration_file: str
@staticmethod
def get_root_dir():
"""Нахождение директории установки ПО"""
return Path(__file__).absolute().parent
@abstractmethod
def record_date(self) -> dict:
""""""
raise NotImplementedError
def record_constants(self):
"""Загрузка расчетных и программных констант в файл конфигурации"""
with open(self.get_root_dir()/self.configuration_file, "w") as outfile:
new_dump = yaml.dump(self.record_date())
outfile.write(new_dump)
@property
def read_constants(self) -> dict:
"""Чтение констант из файла конфигурации"""
with open(self.get_root_dir()/self.configuration_file, "r") as stream:
injector_constants = yaml.safe_load(stream)
return injector_constants
@dataclass(frozen=True)
class InjectorConstants(ConstantHandler):
laminar: float
turbulent: float
right_angle: float
@property
def record_calculated_constants(self) -> dict:
"""Загрузка значений констант для определения границ расчета"""
injector_constants = {
"reynolds": {"laminar": self.laminar, "turbulent": self.turbulent},
"right_angle": self.right_angle,
}
return injector_constants
警告:
字面意思是:
有很多选项可以解决这个问题:
record_date实际上,在类中实现一个抽象方法InjectorConstants@abstractmethod从此方法中删除装饰器PyCharm但一般来说,警告不会白白发出,因此前两种选择更可取。