@abstractmethod
时间: 2023-09-02 11:10:45 浏览: 38
@abstractmethod 是 Python 中的一个装饰器,用来声明一个抽象方法或抽象类。抽象方法是指只有方法的声明,没有具体实现的方法,需要子类去实现。抽象类是指至少包含一个抽象方法的类,不能被实例化,只能被继承。使用 @abstractmethod 装饰器可以帮助我们定义抽象方法和抽象类。当一个类中包含了抽象方法时,该类必须声明为抽象类,而且这个类不能被直接实例化,只能被继承并在子类中实现抽象方法。
相关问题
python @abstractmethod
@abstractmethod 是 Python 中的一个装饰器(decorator),用于定义抽象方法。抽象方法是在父类中声明但没有实现的方法,子类必须实现这些方法才能被实例化。
当一个方法被 @abstractmethod 装饰时,它的实现被省略,并且子类必须提供一个实现。如果子类没有提供实现,则在实例化时会抛出一个异常。
以下是一个使用 @abstractmethod 定义抽象方法的示例:
```python
from abc import ABC, abstractmethod
class MyAbstractClass(ABC):
@abstractmethod
def my_abstract_method(self):
pass
class MyClass(MyAbstractClass):
def my_abstract_method(self):
print("Implementing abstract method")
obj = MyClass()
obj.my_abstract_method()
```
在上面的示例中,MyAbstractClass 是一个抽象基类,其中的 my_abstract_method() 方法被定义为抽象方法。MyClass 是 MyAbstractClass 的子类,并且提供了 my_abstract_method() 方法的实现。当实例化 MyClass 类并调用 my_abstract_method() 方法时,将输出 "Implementing abstract method"。
如果 MyClass 没有提供 my_abstract_method() 方法的实现,那么在实例化时将引发 TypeError 异常。
class BaseAnswer(ABC): """上层业务包装器.用于结果生成统一api调用""" @property @abstractmethod def _check_point(self) -> LoaderCheckPoint: """Return _check_point of llm.""" @property @abstractmethod def _history_len(self) -> int: """Return _history_len of llm.""" @abstractmethod def set_history_len(self, history_len: int) -> None: """Return _history_len of llm.""" def generatorAnswer(self, prompt: str, history: List[List[str]] = [], streaming: bool = False): pass
这是一个抽象基类BaseAnswer,它定义了一些通用的接口用于生成对话回复。该类包含三个抽象方法和一个非抽象的方法。
其中,_check_point是一个抽象属性,用于返回LoaderCheckPoint类型的对象,该对象用于加载预训练模型的参数。
_history_len是另一个抽象属性,用于返回历史记录的长度。
set_history_len是一个抽象方法,用于设置历史记录的长度。
generatorAnswer是一个非抽象方法,用于生成AI对话回复,接受一个字符串类型的输入prompt作为对话的开始,一个可选的历史记录参数history用于提供对话历史记录,以及一个streaming参数用于控制回复的长度。该方法在执行时会返回一个字符串类型的回复。
这个抽象基类的目的是为了方便上层业务包装器实现对话回复生成的统一API调用。