返回顶部
首页 > 资讯 > 后端开发 > Python >Python学习之面向函数转面向对象详解
  • 673
分享到

Python学习之面向函数转面向对象详解

2024-04-02 19:04:59 673人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

还记得前文函数章节的‘函数的定义与使用’章节么?今天我们就来针对 类 进行一个综合练习,利用所学的面向对象编程、类 的知识将我们之前做的面向函数编写的学生信息

还记得前文函数章节的‘函数的定义与使用’章节么?今天我们就来针对 类 进行一个综合练习,利用所学的面向对象编程、类 的知识将我们之前做的面向函数编写的学生信息库重构为面向对象的方式。

所谓重构就是对代码设计和结构进行重新修改和开发,上一次我们都是通过函数来开发的,其实他们都是为了一个大目标开发出来的。就是学生目标管理,所以目标都相同,可以放在一个类中开发。

我们今天有两个目的,第一就是将之前面向函数开发的学生信息库功能转变为面向对象开发的学生信息库功能;第二就是要实现批量的增删改查及模糊查找的功能。

代码示例如下:

# coding:utf-8

"""
    @Author:Neo
    @Date:2020/1/15
    @Filename:students_info.py
    @Software:PyCharm
"""


class StudentInfo(object):
    def __init__(self, students):
        self.students = students

    def get_by_id(self, student_id):
        return self.students.get(student_id)

    def get_all_students(self):
        for id_, value in self.students.items():
            print('学号:{}, 姓名:{}, 年龄:{}, 性别:{}, 班级:{}'.fORMat(
                id_, value['name'], value['age'], value['sex'], value['class_number']
            ))
        return self.students

    def add(self, **student):
        check = self.check_user_info(**student)
        if check != True:
            print(check)
            return
        self.__add(**student)

    def adds(self, new_students):
        for student in new_students:
            check = self.check_user_info(**student)
            if check != True:
                print(check, student.get('name'))
                continue
            self.__add(**student)

    def __add(self, **student):
        new_id = max(self.students) + 1
        self.students[new_id] = student

    def delete(self, student_id):
        if student_id not in self.students:
            print('{} 并不存在'.format(student_id))
        else:
            user_info = self.students.pop(student_id)
            print('学号是{}, {}同学的信息已经被删除了'.format(student_id, user_info['name']))

    def deletes(self, ids):
        for id_ in ids:
            if id_ not in self.students:
                print(f'{id_} 不存在学生库中')
                continue
            student_info = self.students.pop(id_)
            print(f'学号{id_} 学生{student_info["name"]} 已被移除')

    def update(self, student_id, **kwargs):
        if student_id not in self.students:
            print('并不存在这个学号:{}'.format(student_id))

        check = self.check_user_info(**kwargs)
        if check != True:
            print(check)
            return

        self.students[student_id] = kwargs
        print('同学信息更新完毕')

    def updates(self, update_students):
        for student in update_students:
            id_ = list(student.keys())[0]
            if id_ not in self.students:
                print(f'学号{id_} 不存在')
                continue
            user_info = student[id_]
            check = self.check_user_info(**user_info)
            if check != True:
                print(check)
                continue
            self.students[id_] = user_info
        print('所有用户信息更新完成')

    def search_users(self, **kwargs):
        values = list(self.students.values())
        key = None
        value = None
        result = []

        if 'name' in kwargs:
            key = 'name'
            value = kwargs[key]
        elif 'sex' in kwargs:
            key = 'sex'
            value = kwargs['sex']
        elif 'class_number' in kwargs:
            key = 'class_number'
            value = kwargs[key]
        elif 'age' in kwargs:
            key = 'age'
            value = kwargs[key]
        else:
            print('没有发现搜索的关键字')
            return

        for user in values:  # [{name, sex, age, class_number}, {}]
            if value in user[key]:
                result.append(user)
        return result

    def check_user_info(self, **kwargs):
        if 'name' not in kwargs:
            return '没有发现学生姓名'
        if 'age' not in kwargs:
            return '缺少学生年龄'
        if 'sex' not in kwargs:
            return '缺少学生性别'
        if 'class_number' not in kwargs:
            return '缺少学生班级'
        return True


students = {
    1: {
        'name': 'Neo',
        'age': 18,
        'class_number': 'A',
        'sex': 'boy'
    },
    2: {
        'name': 'Jack',
        'age': 16,
        'class_number': 'B',
        'sex': 'boy'
    },
    3: {
        'name': 'Lily',
        'age': 18,
        'class_number': 'A',
        'sex': 'girl'
    },
    4: {
        'name': 'Adem',
        'age': 18,
        'class_number': 'C',
        'sex': 'boy'
    },
    5: {
        'name': 'HanMeiMei',
        'age': 18,
        'class_number': 'B',
        'sex': 'girl'
    }
}


if __name__ == '__main__':
    student_info = StudentInfo(students)
    user = student_info.get_by_id(1)
    student_info.add(name='Marry', age=16, class_number='A', sex='girl')
    users = [
        {'name': 'Atom', 'age': 17, 'class_number': 'B', 'sex': 'boy'},
        {'name': 'Lucy', 'age': 18, 'class_number': 'C', 'sex': 'girl'}
    ]
    student_info.adds(users)
    student_info.get_all_students()
    print('------------------------------------------------------')
    
# >>> 执行结果如下:
# >>> 学号:1, 姓名:Neo, 年龄:18, 性别:boy, 班级:A
# >>> 学号:2, 姓名:Jack, 年龄:16, 性别:boy, 班级:B
# >>> 学号:3, 姓名:Lily, 年龄:18, 性别:girl, 班级:A
# >>> 学号:4, 姓名:Adem, 年龄:18, 性别:boy, 班级:C
# >>> 学号:5, 姓名:HanMeiMei, 年龄:18, 性别:girl, 班级:B
# >>> 学号:6, 姓名:Marry, 年龄:16, 性别:girl, 班级:A
# >>> 学号:7, 姓名:Atom, 年龄:17, 性别:boy, 班级:B
# >>> 学号:8, 姓名:Lucy, 年龄:18, 性别:girl, 班级:C
# >>> ------------------------------------------------------


    student_info.deletes([7, 8])
    student_info.get_all_students()
    print('------------------------------------------------------')

# >>> 执行结果如下:
# >>> ------------------------------------------------------
# >>> 学号7 学生Atom 已被移除
# >>> 学号8 学生Lucy 已被移除
# >>> 学号:1, 姓名:Neo, 年龄:18, 性别:boy, 班级:A
# >>> 学号:2, 姓名:Jack, 年龄:16, 性别:boy, 班级:B
# >>> 学号:3, 姓名:Lily, 年龄:18, 性别:girl, 班级:A
# >>> 学号:4, 姓名:Adem, 年龄:18, 性别:boy, 班级:C
# >>> 学号:5, 姓名:HanMeiMei, 年龄:18, 性别:girl, 班级:B
# >>> 学号:6, 姓名:Marry, 年龄:16, 性别:girl, 班级:A
# >>> ------------------------------------------------------


    student_info.updates([
        {1: {'name': 'Jone', 'age': 18, 'class_number': 'A', 'sex': 'boy'}},
        {2: {'name': 'Nike', 'age': 18, 'class_number': 'A', 'sex': 'boy'}}
    ])
    student_info.get_all_students()
    print('------------------------------------------------------')
    
# >>> 执行结果如下:
# >>> ------------------------------------------------------
# >>> 所有用户信息更新完成
# >>> 学号:1, 姓名:Jone, 年龄:18, 性别:boy, 班级:A
# >>> 学号:2, 姓名:Nike, 年龄:18, 性别:boy, 班级:A
# >>> 学号:3, 姓名:Lily, 年龄:18, 性别:girl, 班级:A
# >>> 学号:4, 姓名:Adem, 年龄:18, 性别:boy, 班级:C
# >>> 学号:5, 姓名:HanMeiMei, 年龄:18, 性别:girl, 班级:B
# >>> 学号:6, 姓名:Marry, 年龄:16, 性别:girl, 班级:A
# >>> ------------------------------------------------------    
    
    
    result = student_info.search_users(name='d')
    print(result)
    print('------------------------------------------------------')
    
# >>> 执行结果如下:
# >>> [{'name': 'Adem', 'age': 18, 'class_number': 'C', 'sex': 'boy'}]


    result = student_info.search_users(name='小')
    print(result)
    print('------------------------------------------------------')

# >>> 执行结果如下:
# >>> ------------------------------------------------------
# >>> []
# >>> ------------------------------------------------------

    result = student_info.search_users(name='')
    print(result)
    result = student_info.search_users(name='小')
    print(result)
    print('------------------------------------------------------')
# >>> 执行结果如下:
# >>> ------------------------------------------------------[{'name': 'Jone', 'age': 18, 'class_number': 'A', 'sex': 'boy'}, {'name': 'Nike', 'age': 18, 'class_number': 'A', 'sex': 'boy'}, {'name': 'Lily', 'age': 18, 'class_number': 'A', 'sex': 'girl'}, {'name': 'Adem', 'age': 18, 'class_number': 'C', 'sex': 'boy'}, {'name': 'HanMeiMei', 'age': 18, 'class_number': 'B', 'sex': 'girl'}, {'name': 'Marry', 'age': 16, 'class_number': 'A', 'sex': 'girl'}]
# >>> []  

    result = student_info.search_users(name='')
    print(result)

到此这篇关于python学习之面向函数转面向对象详解的文章就介绍到这了,更多相关Python 面向函数 面向对象内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python学习之面向函数转面向对象详解

本文链接: https://lsjlt.com/news/142766.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python学习之面向函数转面向对象详解
    还记得前文函数章节的‘函数的定义与使用’章节么?今天我们就来针对 类 进行一个综合练习,利用所学的面向对象编程、类 的知识将我们之前做的面向函数编写的学生信息...
    99+
    2024-04-02
  • Python学习之面向对象编程详解
    目录什么是面向对象编程(类)类的关键字 - class类的定义与使用类的参数 - selfself 的解析与总结类的构造函数构造函数的创建方法关于对象的生命周期什么是面向对象编程(类...
    99+
    2024-04-02
  • Python - 面向对象学习
    本节内容: 面向对象编程介绍为什么要用面向对象进行开发?面向对象的特性:封装、继承、多态类、方法、  引子你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是...
    99+
    2023-01-31
    面向对象 Python
  • Python面向函数转面向对象实例分析
    本文小编为大家详细介绍“Python面向函数转面向对象实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python面向函数转面向对象实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。我们今天有两个目的...
    99+
    2023-06-29
  • Scala 学习之面向对象(3)
    ==> 类        ---> 类的定义class Student{     // 定义属性     private var stuName:String = "Tom"     private vat stuAge:Int...
    99+
    2023-01-31
    面向对象 Scala
  • python基础之函数和面向对象详解
    目录函数函数参数变量作用域内嵌函数和闭包lambda 表达式面向对象三大特性类、类对象 和 实例对象类属性 和 对象属性私有魔法方法基本的魔法方法算术运算符属性访问 描述符...
    99+
    2024-04-02
  • Python学习 :面向对象 -- 三大
    面向对象的三大特性 一、封装 把数据、值、变量放入到对象中 构造方法 _init_方法 特殊作用: 在 obj = 类名() 执行时: 内部自动执行两个步骤: 1、创建对象 2、通过对象执行类中的一个特殊方法(_init_方法) ...
    99+
    2023-01-30
    三大 面向对象 Python
  • python学习32(面向对象_3)
    继承 面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。继承完全可以理解成类之间的类型和子类型关系。即一个派生类(derived class)继承基类(bass class)字段和方法。继承也允许把一个派生...
    99+
    2023-01-31
    面向对象 python
  • python 面向对象之析构函数
    析构函数: 在实例释放、销毁的时候自动执行的,通常用于做一些收尾工作, 如关闭一些数据库连接,关闭打开的临时文件析构函数,是无法传参的class Role(object):     ...
    99+
    2023-01-30
    面向对象 函数 python
  • Python面向对象之模块详解
    目录1.1 导入模块1.1.1 import 模块名1.1.2 from 模块名 import 功能名1.1.3 from …import*1.1.4 as 定义别名1.2 制作模块...
    99+
    2024-04-02
  • python学习之面向对象【入门初级篇】
    前言 最近在学习Python的面向对象编程,以前是没有接触过其它的面向对象编程的语言,因此学习这一部分是相当带劲的,这里也总结一下。 概述 python支持多种编程范式:面向过程、面向对象、面向切面(...
    99+
    2022-06-04
    面向对象 入门 python
  • Python面向对象之面向对象基本概念
    面向过程和面向对象概念 过程和函数:过程类似于函数,只能执行,但是没有返回结果;函数不仅能执行,还能返回结果。 面向过程和面向对象 基本概念 面向过程-怎么做 把完成某一个需求的所有步骤从头到尾逐步实现; 根据开发需求,将某些功能独立的...
    99+
    2023-01-31
    面向对象 基本概念 Python
  • Python学习教程:面向对象学习实力讲解
    类的实现class Cat:"""猫科动物类"""tag='我是家猫 'def __init__ (self,name,age=0): #没有默认值必须要传,且写在...
    99+
    2023-06-02
  • js 面向对象学习笔记
    目录数据赋值拷贝值类型赋值--函数形参&实参引用类型赋值对象的动态性delete删除属性数据赋值拷贝 1、值得赋值是独立的 num1=12; num1=num2 将存储值赋值...
    99+
    2023-05-18
    js 面向对象
  • Java学习笔记之面向对象编程精解
    目录包继承super 关键字finalprotected关键字组合多态抽象类接口面向对象编程(包、继承、组合、多态 、抽象类、接口) 包 包其实就是类的集合,其本质上其实就是一个文件...
    99+
    2024-04-02
  • Python函数式编程之面向过程面向对象及函数式简析
    目录Python 函数式编程同一案例的不同写法,展示函数式编程面向过程的写法面向对象的写法接下来进入正题,函数式编程的落地实现Python 函数式编程的特点纯函数Python 函数式...
    99+
    2024-04-02
  • python面向对象之类的继承详解
    目录一、概述 二、类的继承2.1 继承的定义2.2 构造函数的继承 2.3 子类对父类方法的重写三、类继承的事例一、概述  面向对象编程 (OOP) 语言的一个主要功能就是“继承”。...
    99+
    2024-04-02
  • Python基础之面向对象进阶详解
    目录面向对象三大特征介绍继承语法格式查看类的继承层次结构object根类dir()查看对象属性str()方法的重写多重继承MRO()super()获得父类定义多态特殊方法和重载运算符...
    99+
    2024-04-02
  • Java面向对象:抽象类的学习
    本文介绍了抽象类的基本语法概念,什么是抽象类. Java中抽象类的语法,抽象类的特性 抽象类的作用(抽象类和普通类的区别) 用抽象类实现多态… 抽象类的学习 一.什么是抽象类二.抽象类语...
    99+
    2023-09-11
    java 学习 jvm
  • python基础:面向对象详解
    目录1.私有方法2.私有属性3.类部调用私有属性和私有方法  4.子类不能继承父类私有属性和方法  5.修改私有属性的值  ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作