文章目录
- 前言
- 一、面向过程
- 二、 面向对象
- 三、面向对象的三大特性
- 一、封装
- 二、继承
- 私有属性和私有方法
- 三、多态
- 四、高级特性
- 单例模式
前言
这一节主要学习面向对象以及面向对象的三大特性:封装、继承、多态;还有高级特性:类方法、静态方法、@property类属性、单例模式(基于装饰器、基于new方法)
一、面向过程
面向过程是一种以过程为中心的编程思想:分析出解决问题所需要的步骤、然后用函数把这些步骤一一实现,使用的时候一个一个调用就可以了
面向过程的特点:
优点:性能比面向对象高、因为类在调用的时候需要实例化,开销比较大,比较消耗资源
缺点:没有面向对象易于维护、易复用、易扩展
特性:模块化、流程化
二、 面向对象
面向对象是吧构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,二十为了描述整个事务在整个解决问题的步骤中的行为
三、面向对象的三大特性
__init__方法就是将对象和属性绑定在一起
类:是创建实例的模板
对象:是一个一个具体的实例
实例化;就是用类创建对象的过程
一、封装
__init__方法就是将对象和属性绑定在一起
构造方法:实例化对象时自动执行的方法
self:self实质上是实例化的对象
类方法中,python解释器会自动把对象作为参数传给self
下面就是一个简单的封装
class People:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def shopping(self):
print(f'{self.name},{self.age}岁,{self.gender},去西安赛格购物广场购物')
def playGame(self):
print(f'{self.name},{self.age}岁,{self.gender},在家里玩游戏')
def learning(self):
print(f'{self.name},{self.age}岁,{self.gender},在西部开源学习')
p1 = People('小明', '18', '男')
p2 = People('小王', '22', '男')
p3 = People('小红', '20', '女')
p1.shopping()
p2.playGame()
p3.learning()
小明,18岁,男,去西安赛格购物广场购物
小王,22岁,男,在家里玩游戏
小红,20岁,女,在西部开源学习
二、继承
***继承描述的是事物之间的所属关系、当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类,扩展类;而被继承的class称为基类、父类、或者超类
***父类的方法都会继承给子类
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
def learing(self):
print(f'{self.name}正在学习')
def choice_course(self):
print('正在选课中'.center(50, '*'))
class MathStudent(Student):
def choice_course(self):
super(MathStudent,self).choice_course()
info="""
课程表
1.高等数学
2.线性代数
3.python程序设计语言
"""
print(info)
m1 = MathStudent('msy', 20)
m1.learing()
m1.choice_course()
上边是一个简单的继承例子
上边就是单继承,那么有的时候也会存在多继承,而在多继承中分为经典类和新式类,不过在python3中已经全部使用新式类。两者的区别在于,经典类的多继承搜索顺序是深度优先,而新式类的搜索顺序是广度优先
私有属性和私有方法
私有属性和私有变量都是以双下划线开头,类的外部(包括子类)不能进行访问和操作,类的内部可以访问和操作
三、多态
不同的对象执行同一个方法返回不同的值
多态其实在我们之前的学习中已经涉及,比较简单,这里就不一一赘述
四、高级特性
类方法、静态方法、实例方法
类方法和静态方法
类方法:类方法是类对象所拥有的方法,需要用修饰器一般以@clasmethod来标识其为类方法
(1)对于类方法,第一个参数必须是类对象,作为第一个参数(cls是形参,当然也可以使用其他变量名)
(2)能够通过实例对象和类对象去访问
静态方法:静态方法需要用修饰器一般是staticmethod来标识其为静态方法
(1)静态方法不需要多定义参数
(2)能够通过实例对象和类对象去访问
property类属性
方法在调用的时候如果没有参数,我们加上括号不利于理解,所以我们可以使用property类属性帮助我们将类方法转换为类属性,这样我们在调用的时候就不用加上括号,直接调用即可
单例模式
简单来说就是一个类只能构建一个对象的设计模式
确保系统中某个对象的唯一性即一个类只能有一个实例非常重要
下边是两种实现单例模式的方法