0x00:面向对象编程

一、什么是面向过程编程

  • 把编程任务划分成一个一个的步骤,然后按照步骤分别去执行。

    • 小明起床上学 为例,面向过程则做了如下 4 件事:起床、穿衣、洗漱、上学,这 4 个过程的顺序很重要,须一个一个地实现。
  • 对于面向过程的思想: 需要实现一个功能的时候,看重的是开发的步骤和过程,每一个步骤都需要自己亲力亲为。即,根据业务逻辑从上到下写垒代码

    • 以 吃饭 举例:买菜、洗菜、煮饭、切菜……
  • 面向过程编程适合开发中小型项目

二、什么是面向对象编程

  • 面向对象的定义

    • 把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题步骤中的行为。

      • 小明起床上学 为例,我们关心的是小明这个对象,而不是 起床、穿衣、洗漱、上学 这 4 个过程,这 4 个过程是小明这个对象的一部分,只是其中的一种行为,而且对于行为的顺序没有强制要求。
    • 对于面向对象的思想:当需要实现一个功能的时候,看重的并不是过程和步骤,而是关心的是对象,对象能做啥

      • 以 吃饭 举例:找 饭馆 对象,饭馆提供菜和饭,不关心做菜和煮饭的内部过程
    • 面向对象编程适合开发大型项目
  • 面向对象的特性

    1. 面向对象的的三大特性:封装、继承、多态
    2. 面向对象的封装特性:

      • 将属性和方法放到一起封装成一个整体,然后通过实例化对象来处理
      • 对类的属性和方法增加访问权限控制

0x01:类与对象

一、什么是类

  • 类(class)是用来描述具有相同的属性的方法的对象的集合。
  • 他定义了该集合中每一个对象所共有的属性和方法。
  • 类(class)包含俩个组成部分:

    • 属性:栗如姓名、年龄、身高等;
    • 方法:比如恰饭、碎觉、女装等

二、什么是对象

  • 对象就是类的实例化,是一个具体的实体

三、类与对象的关系

  • 类是对象的类型,对象是类的实例;
  • 类是抽象的概念,而对象是一个你能看到的实体;

四、定义类

  • 类由三部分组成:

    1. 类的名称:类型
    2. 属性:对象的属性
    3. 方法:对象的方法
  • 定义格式:

    # 经典定义方式
    class 类名:
        属性列表
        方法列表
    
    class 类名():
        属性列表
        方法列表
          
    # 新式定义方式
    class 类名(object):
        属性列表
        方法列表
  • 注意:

    • 定义类时有俩种形式:经典类新式类,如上示例代码所示。
    • object是Python中所有类最顶级的父类
    • 类名 的命名规则建议按照 驼峰命名法

五、定义方法

  • 定义格式:

    class 类名(object):
        def 方法名(self): 
            ...
  • 定义方法的格式和定义函数类似,也可以设置参数和返回值;
  • 唯一不同的地方是:定义方法时,第一个参数必须为self

六、创建对象 与 调用方法

  • 创建对象

    • 在Python中,可以根据已经定义的类去创建对象
    • 创建格式
    对象变量名 = 类名()
    • 栗如
    # 定义类
    class Fox(object):
        def run(self):
            print('跑!')
    
    # 创建对象
    _fox = Fox()
  • 调用方法

    • 调用格式
    对象变量名.方法名()
    • 注意:虽然定义方法时设置的第一个参数为self;但是传参时并不需要专门向方法传self对应的参数,解释器在处理代码时会自动处理。
    • 举个栗子
    # 定义类
    class Fox(object):
        def run(self):
            print('跑!')
        
        def say_hello(self, _name):
            print(_name, ',你好哇')
    
    # 创建对象
    _fox = Fox()
    
    # 调用方法
    _fox.say_hello('星尘')

七、添加和使用属性

  • 对象不仅有实例方法,也有自己的属性
  • 属性添加格式

    对象变量名.属性名 = 值
  • 属性的赋值与变量类似,首次赋值时会定义属性,再次赋值则会修改属性
  • 举个栗子

    # 定义类
    class Fox(object):
        def run(self):
            print('跑!')
    
    # 创建对象
    _fox = Fox()
    # 添加属性
    _fox.name = '机智的狐狸菌'
    _fox.rbq = ['豆子', '滕青']
    print(_fox.name)
    print(_fox.rbq)
    
    # 修改属性
    _fox.name = '狐狸菌'
    _fox.rbq.append('苏苏')
    print(_fox.name)
    print(_fox.rbq)

八、self的作用

  • 什么是self

    • 在Python类中规定,实现方法的第一个参数是实例对象本身,并且约定俗成,把其名字写为self。
    • 某个对象调用其方法时,Python解释器会

    自动把这个对象

    作为第一个参数传递给方法

    • 通俗理解:哪个对象调用方法,方法中self就是这个对象
    # 定义类
    class Fox(object):
        def run(self):
            print('跑!')
        
        def say_hello(self, _name):
            print(_name, ',你好哇')
    
    # 创建对象
    _fox = Fox()
    
    # 调用方法
    _fox.run()
    _fox.say_hello('星尘')
  • self的作用

    • 在方法中使用 self,可以获取到调用当前方法的对象,进而获取到该对象的属性和方法
    • self作用:为了区分不同对象的属性和方法

self


0x02:魔法方法

一、什么是魔法方法

  • 在Python中,所有以 __ 双下划线包起来的方法,都统称为 Magic Method ,中文称 魔法方法

    • 格式
    __魔法方法名__(self):
        pass
  • 魔法方法是系统提供好的方法名字,用户需重新实现它
  • 魔法方法一般情况下无需手动调用,在合适时候自动会调用

魔法方法不需要手动调用,它在会在生命周期中,自动被调用。

二、__init__()方法

  • __init__()方法叫做 对象的初始化方法,在 创建一个对象后会被自动调用,不需要手动调用
  • __init__()方法的作用:可以使用该函数在创建对象时自动初始化添加对象属性或执行一些函数方法。

    class Fox(object):
        def __init__(self):
            self.name = '机智的狐狸菌'
            print('Hello World,我被初始化了!')
        
        def my_info(self):
            print('我叫', self.name)
            
    # 创建对象
    _fox = Fox()
    # 调用方法
    _fox.my_info()

输出结果

Hello World,我被初始化了!
我叫 机智的狐狸菌
  • __init__()自定义参数

    • __init__(self)除了默认参数self,还可以设置任意个数的自定义参数,例如:__init__(self,x,y,z)
    • init方法 设置的自定义参数必须和创建对象时传递的参数保持一致,例如:对象变量名 = 类名(x,y,z)
    • 开发者可以 设置自定义参数,为对象的默认属性提供 不同的初始值
    class Fox(object):
        def __init__(self, _name):
            self.name = _name
            print(_name, '被初始化了!')
        
        def my_info(self):
            print('我叫', self.name)
            
    # 创建对象
    _fox = Fox('机智的狐狸菌')
    # 调用方法
    _fox.my_info()

输出结果

机智的狐狸菌 被初始化了!
我叫 机智的狐狸菌

三、__str__()方法

  • 如果直接 print 打印对象,会看到创建出来的对象在内存中的地址
  • 当使用print(对象变量名)输出对象的时候,只要类中定义了__str__()方法,就会打印__str__()方法返回值
  • __str__()方法作用主要返回对象属性信息,print(对象变量名)输出对象时直接输出__str__()方法返回的描述信息
  • __str__()方法的返回值必须是 字符串类型
  • 未使用__str__()

    class Fox(object):
        def __init__(self, _name):
            self.name = _name
    
    
    
    # 创建对象
    _fox = Fox('机智的狐狸菌')
    # 调用方法
    print(_fox)

输出结果

<__main__.Fox object at 0x0000026549FC8610>
  • 使用__str__()

    class Fox(object):
        def __init__(self, _name):
            self.name = _name
    
        def __str__(self):
            return '我叫' + self.name
    
    
    # 创建对象
    _fox = Fox('机智的狐狸菌')
    # 调用方法
    print(_fox)

输出结果

我叫机智的狐狸菌

四、__del__()方法

  • 在对象的生命周期结束(对象销毁)时, __del__()方法会自动被调用,做一些清理工作

    class Fox(object):
        def __init__(self, _name):
            self.name = _name
    
        def __str__(self):
            return '我叫' + self.name
    
        def __del__(self):
            print('对象的生命周期结束', self.name, '自己回到了垃圾桶中')
    
    
    # 创建对象
    _fox = Fox('机智的狐狸菌')
    # 调用方法
    print(_fox)

输出结果

我叫机智的狐狸菌
对象的生命周期结束 机智的狐狸菌 自己回到了垃圾桶中
Last modification:August 3rd, 2020 at 05:14 pm
If you think my article is useful to you, please feel free to appreciate