什么时候用到 abstract
时间: 2023-10-24 16:06:08 浏览: 66
在面向对象编程中,abstract(抽象)是一个关键字,用于定义抽象类和抽象方法。抽象类是指不能被实例化的类,它的目的是作为其他类的基类,提供一个通用的接口和默认实现。抽象方法是指没有实现的方法,只有方法声明,没有方法体。抽象方法必须被子类实现,否则子类也必须是抽象类。
使用abstract关键字定义抽象类和抽象方法的主要目的是为了约束子类的行为,使得子类必须实现抽象方法,以便达到多态和代码复用的目的。同时,抽象类也可以提供一些默认实现,使得子类可以继承这些实现,从而减少代码重复。
相关问题
\n raise NotImplementedError('Subclass must implement abstract method
`NotImplementedError` 是 Python 中的一个异常类型,当一个操作或方法没有被实现时抛出。在使用抽象基类(Abstract Base Classes,简称 ABCs)时,这个异常经常被用来提示子类必须提供某个未实现的方法的实现。在 Python 中,`abc` 模块提供了创建抽象基类和定义抽象方法的功能。
抽象基类通常用于定义通用接口,这些接口可以被不同的具体类实现,但抽象基类本身并不提供这些方法的具体实现。当一个抽象方法被调用,但子类没有提供具体的实现时,`NotImplementedError` 就会被抛出,这通常用于提醒开发者需要在子类中实现这个方法。
在 Python 中定义一个抽象基类通常会用到 `abc` 模块中的 `ABCMeta` 类型,以及 `@abstractmethod` 装饰器。以下是一个简单的例子:
```python
from abc import ABCMeta, abstractmethod
class MyAbstractClass(metaclass=ABCMeta):
@abstractmethod
def my_abstract_method(self):
"""
这是一个抽象方法,子类必须实现它。
"""
raise NotImplementedError('Subclass must implement abstract method')
```
当尝试实例化 `MyAbstractClass` 或者任何继承自 `MyAbstractClass` 但没有实现 `my_abstract_method` 的类时,Python 解释器会抛出 `TypeError`,告知开发者不能实例化抽象类。
给出plantuml形式的类图以及说明用到的设计模式
PlantUML是一种文本标注语言,用于生成各种图形,包括类图、流程图等。下面是一个简单的PlantUML类图示例,它展示了单例模式的设计思想:
```plantuml
@startuml
abstract class Singleton {
private static _instance;
+getInstance(): Singleton;
}
Singleton {
Singleton() {}
private constructor() {}
}
SingletonSingleton: Singleton {
Singleton.getInstance() -> this;
}
@enduml
```
在这个例子中:
1. `Singleton` 类是一个抽象类,表示共享资源(如数据库连接或配置),并且声明了一个私有静态实例变量 `_instance`。
2. `getInstance()` 方法是单例的核心,返回该类的唯一实例。如果还未实例化,则新建一个;若已存在则直接返回。
3. `SingletonSingleton` 实例是 Singleton 的实际实现,其构造函数设为私有,防止外部直接创建实例。
**设计模式**:
这个类图代表的是 **单例模式**,这是一种常用的软件设计模式,确保一个类只有一个实例,并提供一个全局访问点。当需要控制资源的数量或保证在整个应用生命周期内只有一个实例时,单例模式非常有用。这里通过将构造函数设置为私有并提供公共获取实例的方法,实现了对类实例的控制。