网站首页 > java教程 正文
在那篇探讨Python接口与“鸭类型”关系的文章中(Python中接口与鸭类型),我们详细介绍了Python中接口的实现方式--鸭类型。尽管“鸭类型”仅作为接口的一种实现策略,并不具备像Java等其他语言中的强制实现检查功能,且甚至需要借助hasattr函数来检验所需的方法是否存在,为此Python引入了abc模块以解决此类难题。该模块为构建抽象基类提供了有力支持。
抽象类主要用于制定规范,而非实际对象创建。它用于设定实现类(或子类)所需拥有的属性或方法,而自身并无实现责任。
抽象类详解
Python 中使用 abc 模块来实现抽象类的功能,其中模块中 ABC 作为抽象基类,抽象类需要继承该类。
abc.abstractmethod 用来定义抽象方法,表示子类必须要实现的方法。
使用property 和abc.abstractmethod 两个装饰器来定义抽象属性, 表示子类必须要实现定义的属性。
我们使用代码来解释:
from abc import ABC, abstractmethod
# ---------------------------------抽象类
# 定义抽象基类User
# 继承ABC
class User(ABC):
# 定义属性
@property
@abstractmethod
def age(self): pass
# 定义初始化函数
def __init__(self, name):
self._name = name
# 定义抽象方法
@abstractmethod
def print_name(self): pass
# --------------------------------实现类
# 定义继承抽象类的Manager
class Manager(User):
# 必须设置属性
@property
def age(self):
return 20
# 定义初始化函数
def __init__(self, name):
super().__init__(name)
# 必须实现的方法
def print_name(self):
print(f"我的名字叫: {self._name}")
# 实例化Manager
m = Manager("小明")
# 调用方法
m.print_name()
# 我的名字叫: 小明
在上述代码中, 我们定义了User 抽象类(继承自 ABC),并且定义了age 抽象属性和print_name 抽象方法,Manager 作为其实现类,分别实现了 age 属性和print_name 两个方法。
注意点
- 如果使用 pycharm 开发, 当一个类继承了一个抽象类,则会提示需要实现的方法, 只需要点击蓝色字,就可直接生成代码,非常方便(示例)。
- 继承了抽象类的子类, 如果没有或没有完全实现所有的方法,则继承的类依然是抽象类,且不能实例化。
猜你喜欢
- 2025-09-06 印尼一艘客轮沉没致至少15人死亡 船只被疑超载
- 2025-09-06 一文读懂Python字段和属性_python字符串属性
- 2025-09-06 「设计模式」设计模式7大原则-迪米特法则
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)