1. 面向对象编程简介
面向对象编程(Object-Oriented Programming,简称OOP),是现代编程语言的一种流行的编程范型。相比于传统的面向过程编程,面向对象编程的思想更符合人类思维模式,让代码更易于理解、维护、扩展。
在面向对象编程的思想中,万物皆为对象,每个对象都有其自身的属性和行为,而不仅仅只是一个函数或者一个变量。这样设计出的程序更加模块化,可以更加有效地提升代码复用性和可维护性。
下面我们使用Python的面向对象编程来实现猫和狗的交互示例,以便更好地理解面向对象编程思想。
class Dog:
def __init__(self, name):
self.name = name
def bark(self):
print('汪汪,我是{}。'.format(self.name))
class Cat:
def __init__(self, name):
self.name = name
def meow(self):
print('喵喵,我是{}。'.format(self.name))
dog = Dog('小黄')
cat = Cat('小花')
dog.bark() # 输出:汪汪,我是小黄。
cat.meow() # 输出:喵喵,我是小花。
在这个示例中,我们定义了两个类:狗和猫。类是面向对象编程中的一个重要概念,它定义了一种新的数据类型,通过类可以创建多个对象实例。
在狗和猫的类中,我们分别定义了初始化方法和行为方法,并使用这两个类分别创建了两只狗和猫的实例,进而调用它们的行为方法。
2. Python中的面向对象编程
2.1 类的定义
在Python中,使用关键字class
来定义一个新的类,同时在类的名称后面使用圆括号指定基类。
下面我们使用代码来定义一个汽车类,并创建一辆新车的实例。
class Car:
def __init__(self, brand, model, year):
self.brand = brand
self.model = model
self.year = year
def get_description(self):
desc = '{} {} ({})'.format(self.brand, self.model, self.year)
return desc
my_car = Car('Tesla', 'Model 3', 2020)
print(my_car.get_description()) # 输出:Tesla Model 3 (2020)
在这个示例中,我们定义了一个Car
类,它有三个属性:brand
、model
和year
。同时我们定义了一个get_description
方法,用于返回汽车的描述信息。
我们创建了一辆新车的实例,并输出它的描述信息。
2.2 对象的创建
在Python中,要使用创建一个对象,可以通过在类名后添加一对圆括号来实现:
class MyClass:
...
obj = MyClass()
在MyClass
类中,我们可以定义一些属性和方法,然后使用这个类来创建多个实例对象。每个实例对象都是独立的,它们之间不会相互影响。我们可以修改一个实例对象的属性,而不会影响到其它的实例对象。
c1 = Car('Tesla', 'Model 3', 2020)
c2 = Car('Porsche', 'Taycan', 2021)
c1.year = 2019 # 修改c1的年份
print(c1.get_description()) # 输出:Tesla Model 3 (2019)
print(c2.get_description()) # 输出:Porsche Taycan (2021)
在上面的示例中,我们创建了两个汽车的实例,分别是c1
和c2
。我们修改了c1
的年份属性,不会影响到c2
。
2.3 类的继承
在面向对象编程中,一种重要的思想就是类的继承。继承是指在一个已有的类的基础上,创建一个新的类,新的类继承了已有类的所有属性和方法,同时还可以添加自己的属性和方法。
在Python中,通过在新的类名后面使用圆括号指定其基类,就可以实现类的继承。
class ElectricCar(Car): # ElectricCar类继承自Car类
def __init__(self, brand, model, year, battery_size):
super().__init__(brand, model, year) # 调用父类的构造方法
self.battery_size = battery_size
def get_battery_size(self):
return self.battery_size
my_electric_car = ElectricCar('Tesla', 'Model S', 2020, 100)
print(my_electric_car.get_description()) # 输出:Tesla Model S (2020)
print(my_electric_car.get_battery_size()) # 输出:100
在这个示例中,我们创建了一个新的类ElectricCar
,它继承了Car
类。我们重写了__init__
方法,在这个方法中既调用了父类的构造方法,又增加了电池容量battery_size
属性。
我们创建了一辆电动汽车的实例,既可以调用get_description
方法输出其描述信息,又可以调用get_battery_size
方法获得其电池容量。
2.4 多态性
多态性是指不同类的对象可以对同一个方法做出不同的响应。在面向对象编程中,多态性是指通过基类定义的统一的接口,来调用不同子类实现的方法。
在Python中,多态性通过方法的重写来实现。例如在上面的示例中,我们可以在ElectricCar
类中重写get_description
方法,来给电动汽车增加描述信息。
class ElectricCar(Car): # ElectricCar类继承自Car类
def __init__(self, brand, model, year, battery_size):
super().__init__(brand, model, year) # 调用父类的构造方法
self.battery_size = battery_size
def get_description(self):
desc = '{} {} ({}) with a {}-kWh battery'.format(
self.brand, self.model, self.year, self.battery_size)
return desc
my_electric_car = ElectricCar('Tesla', 'Model S', 2020, 100)
print(my_electric_car.get_description()) # 输出:Tesla Model S (2020) with a 100-kWh battery
在这个示例中,我们重写了ElectricCar
类的get_description
方法,增加了描述电池容量的信息。我们使用同样的方式调用get_description
方法,不同的是输出的描述信息根据不同的对象产生了相应的变化。
3. 小结
面向对象编程是计算机编程中的重要思想,其将现实世界的概念和计算机编程有机结合起来,提供了更好的代码复用性和可维护性。在Python中,我们可以使用class
关键字来定义一个新的类,使用__init__
方法来初始化对象,使用方法来定义对象的行为。
在Python中,面向对象编程还包括类的继承和多态性。我们可以通过子类继承父类的属性和方法,轻松地实现类的扩展和复用。同时不同的对象可以对同一个方法做出不同的响应,从而进一步定义了对象之间的关系。