跳转至

面向对象

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)