面向对象¶
1. 面向对象和面向过程思想¶
面向对象和面向过程都是一种编程思想,就是解决问题的思路
- 面向对象:OOP(Object Oriented Programming)
常见的面向对象语言包括:java c++ go python koltin
- 面向过程:POP(Process Oriented Programming)
面向过程语言代表是c语言
我们看同一个问题,面向过程和面向对象是怎么解决的?
中午想吃西红柿炒鸡蛋怎么办呢?
面向过程思想
面向过程解决问题必须要知道完成这个功能每一步的操作
- 面向过程思想,强调的是过程(动作)
- 而完成这个功能我们充当的角色是执行者的角色
面向对象思想
同样是中午想吃西红柿炒鸡蛋,
直接到饿了么上下个单,老板就把西红柿炒鸡蛋做好送过来了
餐馆老板具备做西红柿炒鸡蛋的功能,直接调用他的功能即可,不需要知道具体的流程
- 面向对象思想:不再关注具体的过程
- 功能里面充当的角色是指挥者的角色
面向过程和面向对象的总结
面向对象,强调的是对象(实体)
面向对象是一种思想,更加符合人的思维习惯
面向对象使复杂的问题简单化了
面向对象的出现,让曾经在过程中的执行者,编程了对象中的指挥者
2. 类和对象¶
类和对象是面向对象非常重要的概念
- 类是描述了一种类型(相当于图纸)
- 对象是这个类型的具体实现(相当于图纸具体实现)
思考:
狗和旺财,哪个是类,哪个是对象?
狗是一个类型,属于类
旺财是狗的实现,属于对象
定义类和创建对象
类的定义格式:
class 类名:
pass
创建对象
对象名 = 类名()
代码演示:
# 定义类
class Person:
pass
# 创建对象
p1 = Person()
3. 类的组成¶
类可以描述世间万物
类都需要有类名,也应该具备一些静态属性和动态的行为
- 类的关键字:class
- 类的名称:类名
- 类的属性:一组数据
- 类的方法:允许进行操作的方法(行为)
人Person类应该具备什么属性和行为呢?
属性:姓名(name) 、年纪(age)
方法:跑(run)、说话(say)
方法的定义¶
成员方法的定义格式为:
def 函数名(self)
class Person:
# 定义成员方法sayHello
def sayHello(self):
print('hello')
# 定义成员方法run
def run(self):
print('跑')
# 创建对象
p = Person()
# 调用成员方法
p.sayHello()
注意:
成员方法有都有参数self,调用的时候不需要传递self
成员属性¶
成员属性的定义需要在__init__方法下定义
格式:
def __init__(self):
self.属性 = 属性值
class Person:
def __init__(self,name,age):
# 成员属性
self.name = name
self.age = age
# 创建对象
p = Person('张三',30)
# 访问成员属性
print(p.name)
print(p.age)
4. 成员方法的self参数¶
成员方法中self表示调用该方法的对象 对象调用⽅法时,python解释器会把这个对象作为第⼀个参数传递给⽅法 通过self也可以获取对象的属性,调用对象的其它成员方法
class Person:
def __init__(self, name, age):
# 定义成员属性
self.name = name
self.age = age
def sayHello(self):
# 通过self访问成员属性
print(self.name)
# 对象
p = Person('张三', 30)
p.sayHello()
5. __init__方法¶
__init__()__是一个内置的方法 当对象创建的时候就会自动执行__init__()方法
# 定义类
class Person:
def __init__(self):
print('执行了init方法')
# 创建对象
p1 = Person()
p2 = Person()
运行程序,输出:
执行了init方法
执行了init方法
一旦创建了该类的对象就会执行__init__方法
面向对象手机案例¶
1. 需求¶
需求:
手机电量默认是100
打游戏每次消耗电量10
听歌每次消耗电量5
打电话每次消耗电量4
接电话每次消耗电量3
充电可以为手机补充电量
要求:
定义手机类
定义手机类的属性和行为
创建手机对象,访问属性和行为
2. 分析¶
分析:
1.定义类手机类 MobilePhone
2.类具备属性 battery :100
3.定义方法playGame battery -= 10
4.listenMusic battery -= 5
5.call battery -= 4
6.receive battery -= 3
7.charge battery += 10
3. 代码¶
class MobilePhone:
def __init__(self,name):
self.name = name
self.battery = 5
def __str__(self):
return 'name:{},battery:{}'.format(self.name,self.battery)
def playGame(self):
'''
打游戏
:return:
'''
# 电量是否满足打游戏的条件
if self.battery>=10:
print('打游戏')
# 消耗10个电量
self.battery -= 10
else:
print('不能打游戏')
def listenMusic(self):
'''
听歌
:return:
'''
if self.battery >= 5:
print('听歌')
# 消耗10个电量
self.battery -= 5
else:
print('不能打听歌')
def call(self):
'''
打电话
:return:
'''
if self.battery >= 4:
print('打电话')
# 消耗10个电量
self.battery -= 4
else:
print('不能打打电话')
def receiveCall(self):
'''
接电话
:return:
'''
if self.battery >= 3:
print('接电话')
# 消耗10个电量
self.battery -= 3
else:
print('不能接电话')
def charge(self):
'''
充电
:return:
'''
print('充电')
self.battery += 10
# 定义手机对象
phone = MobilePhone('苹果手机')
phone.playGame()
phone.listenMusic()
phone.charge()
print(phone)