使用python,实现面向对象的三大特征:封装继承多态

使用python实现面向对象的三大特征:封装 继承 多态
使用python,实现面向对象的三大特征:封装继承多态

https://blog.csdn.net/weixin_57324246/article/details/118667217

  1. 封装, 封装代码实现细节,外部调用只用知道方法名和传入参数即可:
class Car:
    def __init__(self, color, model):
        self.__color = color
        self.__model = model
        
    def get_color(self):
        return self.__color
    
    def get_model(self):
        return self.__model

car1 = Car("red", "BMW")
print(car1.get_color()) # Output: red

在上面的例子中,我们创建了一个Car类,并使用__init__()方法来初始化对象的颜色和型号属性。属性前加上双下划线“__”表示该属性是私有的,外部无法直接访问。我们使用公有的get_color()get_model()方法来获取对象的私有属性值,从而实现了封装。

  1. 继承:
class Animal:
    def __init__(self, name):
        self.name = name
        
    def speak(self):
        print("The animal speaks")
        
class Dog(Animal):
    def __init__(self, name):
        super().__init__(name)
        
    def speak(self):
        print("The dog barks")
        
animal1 = Animal("random")
animal1.speak() # Output: The animal speaks

dog1 = Dog("Max")
dog1.speak() # Output: The dog barks

在上面的例子中,我们创建了一个Animal类,其中包含一个speak()方法。然后我们定义了一个Dog类,它继承了Animal类,并覆盖了speak()方法。使用super()函数调用父类的__init__()方法来设置name属性的值。这样,我们创建一只Dog对象,它将继承父类的所有属性和方法,并可以覆盖它所需的方法,从而实现了继承。

  1. 多态:
class Animal:
    def __init__(self, name):
        self.name = name
        
    def speak(self):
        print("The animal speaks")
        
class Dog(Animal):
    def __init__(self, name):
        super().__init__(name)
        
    def speak(self):
        print("The dog barks")
        
class Cat(Animal):
    def __init__(self, name):
        super().__init__(name)
        
    def speak(self):
        print("The cat meows")
        
def speak_animal(animal):
    animal.speak()
    
animal1 = Animal("random")
dog1 = Dog("Max")
cat1 = Cat("Misty")

speak_animal(animal1) # Output: The animal speaks
speak_animal(dog1) # Output: The dog barks
speak_animal(cat1) # Output: The cat meows

在上面的例子中,我们创建了AnimalDogCat类。它们都具有speak()方法,但实现方式不同。然后我们定义了一个speak_animal()函数,它接受一个Animal类型的参数并调用speak()方法。当我们传递一个AnimalDogCat对象时,它们将调用其特定类的speak()方法,从而实现了多态。speak_animal()函数可以处理不同类型的动物对象,无需了解具体的类型,只需要知道它们有一个共同的speak()方法。

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7452329
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:【python入门到精通】python面向对象三大特点:封装,继承,多态
  • 你还可以看下python参考手册中的 python- 在其它应用程序嵌入 Python- 对嵌入 Python 功能进行扩展
  • 您还可以看一下 王进老师的跟着王进老师学开发Python篇第五季:面向对象篇课程中的 面向对象的三大特性小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    封装:

    在Python中,我们可以使用类来实现封装。通过将属性和方法封装在类中,我们可以将其视为单个实体,并在必要时只暴露必要的接口。以下代码示例将演示如何在Python中实现封装:

    class Car:
        def __init__(self, make, model, year):
            self.make = make
            self.model = model
            self.year = year
            self.__odo = 0 # 私有属性
    
        def __drive(self): #私有方法
            print("Car is driving.")
    
        def start(self):
            self.__drive()
    
        def get_odo(self): #公有方法
            return self.__odo
    
        def update_odo(self, odo):
            if odo >= self.__odo:
                self.__odo = odo
    

    在上面这个例子中,我们创建了一个汽车类,该类有公有和私有方法和属性。我们使用__来表示私有方法和属性,以便将其封装在类中,只公开所需的接口。例如,我们可以使用公有方法get_odo()来获取私有属性__odo的值,而不能直接访问它。另外,我们可以使用start()方法来调用私有方法__drive(),而不需要从外部直接访问。

    继承:

    在Python中,我们可以使用继承来扩展已有的类,从而创建新的类。例如,我们可以创建一个新类,该类继承了汽车类,并具有更多的特性。

    class ElectricCar(Car):
        def __init__(self, make, model, year, battery_size):
            super().__init__(make, model, year)
            self.battery_size = battery_size
    
        def charge(self):
            print("Charging battery.")
    

    在上面这个例子中,我们创建了一个ElectricCar类,该类继承了Car类。我们使用super()函数来调用Car类的__init__方法,以便在初始化时设置相同的属性。在ElectricCar类中,我们还添加了一个新的属性battery_size和一个新的方法charge(),以打印一条消息来表示正在充电。

    多态:

    在Python中,多态是通过多个类实现相同方法名称来实现的。这些类可以有不同的实现方法,但是调用这些方法的语法是相同的。以下代码示例将演示多态的示例:

    class Shape:
        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 ** 2
    

    在上面这个例子中,我们创建了一个基类Shape和两个派生类RectangleCircle。每个类都定义了一个area()方法,用于计算其形状的面积。由于RectangleCircle都实现了area()方法,因此可以将它们视为具有相同方法名称的实体。也就是说,在代码其他地方,我们可以调用area()方法,而无需关心具体是什么形状。在运行时,Python根据对象类型动态确定要调用的方法。