知识构图:
一、前言
1.1 介绍:什么是面向对象编程?
面向对象编程(Object-oriented programming,简称OOP)是一种编程范式,它将程序分解为对象的集合,对象之间通过相互的消息传递来完成任务。通过定义类(class)来创建对象的蓝图,面向对象编程将真实世界中的问题抽象为对象,通过定义对象的属性和行为来描述问题的解决方案。OOP的核心思想是通过封装、继承和多态,使代码更模块化、可维护、可复用。
1.2 python中为什么选择面向编程?
在Python中使用面向对象编程的主要原因是,它可以帮助我们组织和管理代码,使其更加易于理解和维护。通过将代码组织为对象和类的形式,可以更好地模拟现实世界的问题,提高代码的可复用性和可扩展性。
二、基本概念
2.1 对象、类、实例的概念解释
在面向对象编程中,对象是程序的基本单元,是数据和方法的封装体。类是对象的蓝图,定义了对象的结构和行为。实例是类的具体实现,是对象的具体表现。
2.1.1 对象
对象是程序的核心,包含数据和方法。例如,一个汽车对象可以有数据如颜色、速度,以及方法如启动、停止。
2.1.2 类(相当于多个函数集合的定义)
类是对象的模板或蓝图,定义了对象的属性和方法。例如,汽车类定义了所有汽车对象都具有的属性和方法。
2.1.3 实例
实例是类的具体实现,是对象的一个具体表现。例如,一辆红色的汽车是汽车类的一个实例。
2.2 面向对象编程的基本原则:封装、继承、多态
封装:封装是一种将数据和方法包装在类中的机制,使得对象的内部细节对外部不可见。
继承:继承是一种机制,允许一个类(子类)继承另一个类(父类)的属性和方法。
多态:多态是一种允许同一个方法在不同类中有不同实现的机制。
三、类和对象
3.1 定义类和创建对象
示例一:定义一个矩形类,包含两个数据成员(属性参数):宽度和高度;该类提供的两种方法(功能函数):求面积和周长
class Rectangle: #定义一个类Rectangle
#(1)定义初始化方法 (所有的类都有一个初始化方法)
def __init__(self,width,height): #第一个属性参数必须是self(类对象)
self.width = width #给实例属性赋予初始值(将实参传递给形参)
self.height = height
#(2)定义实例方法:
def getArea(self): #至少要有一个参数属性self
S = self.width * self.height #求面积值,赋值给S,用self . 属性访问
return S #返回 S 值
def getPerimeter(self):
C = 2 * (self.width + self.height)
return C
3.2类的属性(变量)和方法 (函数)
类的属性是描述对象特征的变量,而方法是对象能够执行的操作。
3.2.1 实例属性:在方法内部通过‘self.属性变量名’定义和访问变量(在外部通过‘对象名.实量名名访问’)
3.2.2 类属性:在所有方法之外定义的属性(变量)
3.2.3 方法的定义:与类相关的函数
3.2.4 方法类型:实例方法,类方法,静态方法
3.2.5 实例方法:至少包含一个对象参数self放在第一个;在内部通过‘self.方法()’调用(访问)在外部通过‘对象名.方法()调用(访问)’
四、封装
4.1 封装的概念和意义
封装是面向对象编程的一个重要原则,它将对象的状态和行为封装在一起,并限制外部对对象的直接访问。这提高了代码的安全性和可维护性。 在Python中,可以通过在属性和方法前添加双下划线`__`来实现成员的私有化。示例:
class Student:
def __init__(self, name, age):
self.__name = name # 私有属性
self.__age = age # 私有属性
def display_info(self):
print(f"Student: {self.__name}, Age: {self.__age}")
4.1.1 创建Student类的实例
student = Student(name="张培森", age=20)
# 访问私有属性(会抛出AttributeError)
# print(student.__name)
# 通过类的公有方法访问私有属性
student.display_info()
4.2 私有成员和公有成员
在面向对象编程中,封装通过将对象的内部状态隐藏,提供有限的接口来访问对象,从而降低了代码的复杂性。
4.2.1 私有成员: 通过在属性和方法前添加双下划线'__'
,将其设置为私有成员。这样的成员只能在类的内部访问。
4.2.2 公有成员: 没有前缀或者以单下划线'_'
为前缀的成员是公有成员,可以在类的外部访问。
五、类的继承、重写和多态
5.1 继承:子类继承父类的方法
5.2 重写:子类可以重写子类的方法(方法名称相同)
5.3 多态:子类方法名称相同但功能不同
5.4 示例
class Person:
#(1)初始化方法
def __init__(self,name,age,sex):
self.name = name
self.age=age
self.sex=sex
#(2)实体方法
def study(self):
print(self.name,'正在学习!')
def show(self):
print('姓名:{}\n年龄:{}\n性别:{}\n'.format(self.name,self.age,self.sex))
#定义一个子类student
class Student(Person): #定义一个父类为Person的子类Student
#(1)初始方法:
def __init__(self,name,age,sex,major):
super().__init__(name,age,sex) #用super ()内置函数,继承父类的初始方法
# self.name=name
# self.age=age
# self.sex=sex
self.major=major #添加类成员(重写)
#(2)实例方法:
def show(self): #方法的重写
Person.show(self) #用父类名 .方法的继承
print('专业:',self.major) #添加方法的功能
s = Student('张培森','20','男','数字科学') #创建student对象S
s.study() #调用父类的方法
s.show() #调用子类的方法