2.14 面向对象编程基础
面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它使用对象来设计应用程序,并将数据和方法封装在对象中。Python是一种支持面向对象编程的语言,它允许开发者定义类和对象,以及使用继承、封装和多态等OOP特性。
1. 类和对象
在Python中,一切都是对象。类是创建对象的蓝图,而对象是类的实例。
定义一个类
class Car:
def __init__(self, make, model):
self.make = make
self.model = model
def start_engine(self):
print("Engine started.")
# 创建Car类的一个实例
my_car = Car("Toyota", "Corolla")
my_car.start_engine()
2. 封装
封装是将数据(属性)和操作数据的方法(行为)捆绑在一起的过程。在Python中,可以通过使用私有变量(以两个下划线开头)和公有变量(以单个下划线开头或没有下划线)来实现封装。
class Account:
def __init__(self, account_number, balance):
self.__account_number = account_number # 私有变量
self.__balance = balance # 私有变量
def deposit(self, amount):
if amount > 0:
self.__balance += amount
print("Deposit successful.")
def get_balance(self):
return self.__balance
# 创建Account类的一个实例
account = Account("123456789", 1000)
account.deposit(500)
print(account.get_balance())
3. 继承
继承允许一个类(子类)继承另一个类(父类)的属性和方法。子类可以扩展父类的功能或覆盖父类的方法。
class Vehicle:
def start_engine(self):
print("Engine started.")
class Car(Vehicle): # Car继承自Vehicle
def start_engine(self):
print("Car engine started.")
my_car = Car()
my_car.start_engine()
4. 多态
多态是指不同类的对象对同一消息做出响应的能力。在Python中,多态是通过方法重写实现的。
class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
print("Woof!")
class Cat(Animal):
def speak(self):
print("Meow!")
def animal_sound(animal):
animal.speak()
dog = Dog()
cat = Cat()
animal_sound(dog) # 输出: Woof!
animal_sound(cat) # 输出: Meow!
5. 抽象
抽象是将复杂的现实问题简化为简单的模型的过程。在Python中,可以通过定义接口(使用abc模块)来实现抽象。
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
pass
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius ** 2
circle = Circle(5)
print(circle.area())
6. 组合
组合是将一个类的实例作为另一个类的属性。这允许代码重用和更复杂的对象结构。
class Engine:
def start(self):
print("Engine started.")
class Car:
def __init__(self):
self.engine = Engine() # 组合
def start(self):
self.engine.start()
print("Car started.")
my_car = Car()
my_car.start()
面向对象编程是一种强大的编程范式,它可以帮助开发者构建可维护、可扩展和模块化的代码。通过理解和应用OOP的基本概念,你可以编写更清晰、更有效的Python程序。