python基础之抽象抽象类 python
更新时间:2023-10-02抽象:
在面向对象编程中,抽象是指隐藏具体实现细节,把重点放在类的行为、接口和责任上。在Python中,抽象可以通过多种方式实现,包括使用接口、基类或装饰器等方式。
from abc import ABC, abstractmethod class Shape(ABC): @abstractmethod def area(self): pass class Rectangle(Shape): def __init__(self, width, height): self.width = width self.height = height def area(self): return self.width * self.height r = Rectangle(5, 10) print(r.area())
上面代码中,我们定义了一个Shape抽象基类,其中包含一个抽象方法area()。 Rectangle类是一个具体实现,继承自Shape类,并重写了area()方法。这种实现方式可以确保类的使用者按照规范进行编程。
抽象类:
抽象类是一种具有特殊属性的类,不能直接被实例化,只能被继承。在Python中,抽象类可以由abc模块中的ABCMeta元类和abstractmethod装饰器定义。
from abc import ABCMeta, abstractmethod class Animal(metaclass=ABCMeta): @abstractmethod def speak(self): pass class Cat(Animal): def speak(self): return "Meow" class Dog(Animal): def speak(self): return "Woof" c = Cat() print(c.speak()) d = Dog() print(d.speak())
上面代码中,Animal是一个抽象类,其中包含一个抽象方法speak()。 Cat和Dog类是具体实现,都重写了speak()方法。通过这种方式,我们可以确保Animal类的所有子类都实现了speak()方法。
抽象和多态:
抽象类和多态是Python面向对象编程中最基本的概念。多态是指通过不同的实现方式实现相同的行为。Python的多态特性允许在运行时动态绑定不同的实现。抽象类和接口是实现多态的关键,可以定义多个具有不同实现细节的类,并保证它们都实现了规范定义的接口。
from abc import ABC, abstractmethod class Shape(ABC): @abstractmethod def area(self): pass class Rectangle(Shape): def __init__(self, width, height): self.width = width self.height = height def area(self): return self.width * self.height class Circle(Shape): def __init__(self, radius): self.radius = radius def area(self): return 3.14 * self.radius * self.radius shapes = [Rectangle(5, 10), Circle(7)] for shape in shapes: print(shape.area())
上面代码中,我们定义了一个Shape抽象基类,其中包含一个抽象方法area()。 Rectangle和Circle类都是具体实现,并分别重写了area()方法。最后,我们把Rectangle和Circle对象放在一个列表中,并依次遍历列表,调用它们的area()方法。由于它们都是Shape的子类,所以都可以正常工作,实现了多态。
总结:
Python中的抽象和抽象类是面向对象编程的核心概念之一,可以帮助我们更好地组织和设计程序。抽象可以隐藏实现细节,强调类的行为、接口和责任;抽象类是一种具有特殊属性的类,不能直接被实例化,只能被继承,并且必须定义抽象方法。在Python中,抽象类可以由abc模块中的ABCMeta元类和abstractmethod装饰器定义。抽象和多态是Python面向对象编程中最基本的概念,可以实现通过不同的实现方式实现相同的行为,并确保所有的实现都满足规范定义的接口。