您的位置:

Python的面向对象特性

一、Python面向对象的三大特性

Python作为一种面向对象的编程语言,具有三大特性:封装、继承和多态。

1、封装

封装是指将对象的某些属性和方法隐藏起来,不允许外部程序直接访问和修改。Python中通过在某些属性和方法名前添加两个下划线“__”实现了属性和方法的私有化,这种方式也被称为“名称重整”(name mangling)。

class Car:
    def __init__(self, color, model):
        self.__color = color
        self.model = model

    def get_color(self):
        return self.__color

    def set_color(self, color):
        self.__color = color

my_car = Car("red", "Tesla Model S")
print(my_car.get_color())   # 输出:red
my_car.set_color("blue")    # 修改颜色为blue
print(my_car.get_color())   # 输出:blue

上面的代码中,我们将Car类的颜色属性私有化了,外部无法直接访问,只能通过公共的get_color和set_color方法来获取或修改颜色属性的值。

2、继承

Python中的继承是一种创建新类的方式,新类可以继承现有类的方法和属性,从而避免代码冗余和提高代码复用性。Python中使用圆括号指定继承的基类,如果省略基类,则默认为object。

class Animal:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def say_hello(self):
        print("I'm an animal.")

class Dog(Animal):
    def __init__(self, name, age, breed):
        super().__init__(name, age)
        self.breed = breed

    def say_hello(self):
        print("I'm a dog.")

my_dog = Dog("Tom", 3, "Husky")
my_dog.say_hello()    # 输出:I'm a dog.

上面的代码中,我们定义了一个Animal基类,其中有name和age两个属性,以及say_hello方法。然后我们再定义一个Dog类,并继承Animal类,新增breed属性和重新实现say_hello方法。这样我们就可以使用Dog类的对象来访问原来Animal类的方法和属性,也可以扩展和修改原来的属性和方法。

3、多态

多态是指同一个方法可以作用于不同的对象,并根据对象的类型执行不同的操作。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

my_rectangle = Rectangle(3, 4)
my_circle = Circle(5)

print(my_rectangle.area())    # 输出:12
print(my_circle.area())       # 输出:78.5

上面的代码中,我们定义了一个Shape基类,其中有一个area方法,但是不做具体实现,因为不同的形状会有不同的计算公式。然后我们分别定义了Rectangle和Circle两个类,都继承自Shape类,并分别实现了自己的area方法,这样我们就可以使用不同的对象调用相同的方法并得到不同的结果。

二、Python面向对象的四大特性

有时候我们也会把多态理解为Python面向对象的四大特性之一,这样就得到了封装、继承、多态以及抽象四个特性。

1、抽象

抽象是指将一个复杂的实体或问题简化成一些关键的特征和属性,然后忽略其他的次要特征。Python中实现抽象的方式是通过接口或者抽象基类(Abstract Base Classes)来实现。

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 ** 2

my_rectangle = Rectangle(3, 4)
my_circle = Circle(5)

print(my_rectangle.area())    # 输出:12
print(my_circle.area())       # 输出:78.5

上面的代码中,我们定义了一个Shape基类,并规定了area方法必须被子类实现。这样就保证了所有的形状对象都必须实现自己的area方法,并且可以直接使用Shape类对象去调用area方法,从而达到了抽象的目的。

三、面向对象程序设计的特性

面向对象程序设计具有以下特性:

1、封装数据和行为

数据和行为被作为一个整体进行封装,从而保护了数据的独立性和安全性。

2、继承和子类化

子类可以从父类中继承属性和方法,并且也可以根据自己的需要添加新的属性和方法。

3、多态

同一个方法可以作用于不同的对象,并根据对象的类型执行不同的操作。

4、模块化开发

不同的类可以分别定义在不同的文件中,以达到更好的模块化开发和代码管理。

5、接口和抽象类

接口和抽象类可以约束子类必须实现哪些方法和属性,并且可以达到更好的代码扩展和复用。