c语言编程笔录

首页 >   > 笔记大全

笔记大全

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面向对象编程中最基本的概念,可以实现通过不同的实现方式实现相同的行为,并确保所有的实现都满足规范定义的接口。