来源:
'https://yuanbao.tencent.com/bot/app/share/chat/bh73DvfgcOoa','https://yuanbao.tencent.com/bot/app/share/chat/feDbAjOdSa7g',
'https://yuanbao.tencent.com/bot/app/share/chat/tqiQbH2bj5Af','https://yuanbao.tencent.com/bot/app/share/chat/jhWbVPWERsgM',
'https://yuanbao.tencent.com/bot/app/share/chat/ND6FYvQRhCy6','https://yuanbao.tencent.com/bot/app/share/chat/Z8TwNXc3r4qa',
'https://yuanbao.tencent.com/bot/app/share/chat/5cS0857oaanf'
抽象类是包含一个或多个抽象方法的类,这些方法只有声明而没有具体实现。抽象类不能被实例化,它的主要目的是为子类提供统一的接口规范,强制子类实现特定的方法。
Python通过abc
模块提供抽象基类(Abstract Base Classes, ABC)支持。主要组件:
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
"""计算形状的面积"""
pass
@abstractmethod
def perimeter(self):
"""计算形状的周长"""
pass
def description(self):
"""返回形状的描述(具体方法)"""
return "这是一个几何形状"
子类必须实现抽象基类中定义的所有抽象方法,否则在实例化时会引发TypeError
。
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius ** 2
def perimeter(self):
return 2 * 3.14 * self.radius
# 可以重写具体方法
def description(self):
return f"这是一个半径为{self.radius}的圆形"
# 使用示例
circle = Circle(5)
print(circle.area()) # 输出: 78.5
print(circle.perimeter()) # 输出: 31.400000000000002
print(circle.description())# 输出: 这是一个半径为5的圆形
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
def perimeter(self):
return 2 * (self.width + self.height)
# 使用示例
rect = Rectangle(4, 5)
print(rect.area()) # 输出: 20
print(rect.perimeter()) # 输出: 18
print(rect.description()) # 输出: 这是一个几何形状(使用基类实现)
from abc import ABC, abstractmethod
class Animal(ABC):
@property
@abstractmethod
def diet(self):
"""动物的饮食类型"""
pass
@abstractmethod
def make_sound(self):
pass
class Lion(Animal):
@property
def diet(self):
return "肉食"
def make_sound(self):
return "吼!"
# 使用示例
lion = Lion()
print(lion.diet) # 输出: 肉食
print(lion.make_sound()) # 输出: 吼!
class Flyer(ABC):
@abstractmethod
def fly(self):
pass
class Swimmer(ABC):
@abstractmethod
def swim(self):
pass
class Duck(Flyer, Swimmer):
def fly(self):
return "鸭子飞翔"
def swim(self):
return "鸭子游泳"
# 使用示例
duck = Duck()
print(duck.fly()) # 输出: 鸭子飞翔
print(duck.swim()) # 输出: 鸭子游泳
Python抽象类通过abc
模块提供了一种强大的面向对象编程机制:
ABC
作为基类@abstractmethod
定义抽象方法合理使用抽象类可以显著提高代码质量,增强可维护性,并减少错误。但需注意避免过度设计,只在真正需要统一接口规范的地方使用抽象类。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。