内容回顾

  • super

    • 遵循mro算法
    • 只在新式类中能适应
    • py2新式类中需要自己添加参数
  • 封装
    • 广义上的封装
    • 狭义上的封装 (__名字)
      • 方法名私有化
      • 实例变量私有化
      • 静态变量私有化
    • 私有化的特点
      • 只能在类的内部使用,不能在外部使用
      • 不能被子类继承
  • 内置函数
    • 装饰器等
    • 反射相关(简化代码)
      • hasattr
      • getattr
      • 字符串数据类型的变量名,getattr(对象,‘变量名’)获取变量的值

今日内容

面向对象end

  • 两个装饰器classmethod、staticmethod
  • 一些内置的魔术方法__new__、__call__、__len__、__eq__、__str__、__repr__、__del__、__enter__、__exit__
  1. classmethod

    #classmethod
    #定义了一个方法,默认传self,但self没被使用,如下:
    class Goods:
    __discount=0.8
    def __init__(self):
    self.__price=5
    self.price=self.__price*self.__discount
    def change_discount(self,new_discount):
    Goods.__discount=new_discount
    apple=Goods()
    print(apple.price)
    #修改折扣0.6
    apple.change_discount(0.6) apple2=Goods()
    print(apple2.price) #使用classmethod,程序的修改成本降低了很多,把一个对象绑定的方法,修改为类方法
    class Goods:
    __discount=0.8
    def __init__(self):
    self.__price=5
    self.price=self.__price*self.__discount
    @classmethod
    def change_discount(cls,new_discount):
    cls.__discount=new_discount
    apple=Goods()
    print(apple.price)
    #修改折扣0.6
    apple.change_discount(0.6) apple2=Goods()
    print(apple2.price)
    #staticmethod 被装饰的方法会成为一个静态方法
  2. 能定义到类中的内容

    • 静态变量:是个所有对象共享的变量
    • 绑定方法:是个自带self参数的函数 由对象调用
    • 类方法:是个自带cls参数的函数 由对象或类调用
    • 静态方法:是个啥都不带的普通函数 由对象或类调用
    • property属性:是个伪装成属性的方法 由对象调用,但不加括号
  3. __call__方法

    #判断callable的对象
    #对象+()能不能运行,就是callable判断的事 class A:
    def __call__(self, *args, **kwargs):
    print('>>>') obj=A()
    print(callable(obj))
    obj() #对象+()就是调用这个类中的__call__方法
  4. __len__方法

    class Cls:
    def __init__(self,name):
    self.name=name
    self.students=[]
    def __len__(self):
    return len(self.students)
    py22=Cls('py22')
    print(len(py22.students))
    #类中有__len__方法,那这个类的对象就可以使用len()来调用这个方法
  5. __new__方法

    #__new__
    class A:
    def __init__(self):
    print('init')
    def __new__(cls, *args, **kwargs):
    print('new')
    return super().__new__(cls)
    A()
    '''
    new
    init
    '''

    new来开空间,借用父类object的new,不用自己写,在类中先调用new,在调用init

  6. 设计模式--单例模式

    • 一个类 从头到尾 只会创建一次self空间
    • 如果在模块中写,每次导入都是单例
    • 网络编程的时候会再提到
  7. __str__``__retr__方法

  8. 选课系统的需求分析

    • 功能概述:学生选课
    • 需求分析:
      • 核心功能:选课
    • 角色:学生、管理员
    • 工作流程:
      • 登录:用户名密码
      • 判断身份:在登陆的时候判断是学生还是管理员
      • 学生用户:登录之后三个功能
        • 1.查看所有课程
        • 2.选择课程
        • 3.查看所选课程
        • 4.退出程序
      • 管理员用户:
        • 创建课程
        • 创建学生账号
        • 查看所有课程
        • 查看所有学生
        • 查看学生选课情况
        • 退出程序
      • 课程:
        • 属性:课程名、价格、周期、老师
      • 学生:
        • 属性:姓名,所选课程
        • 方法:查看可选课程、选择课程、查看所选课程、退出
      • 管理员
        • 属性:姓名
        • 方法:创建课程、创建学生账号、查看所有课程、查看所有学生、查看选课情况、退出

代码总行数2764+59=2823行

python27day的更多相关文章

随机推荐

  1. Misaki's Kiss again(hdu5175)

    Misaki's Kiss again Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

  2. JPEG原理详解 (转载)

    JPEG算法解密 by jinchao   图片压缩有多重要,可能很多人可能并没有一个直观上的认识,举个例子,一张800X800大小的普通图片,如果未经压缩,大概在1.7MB左右,这个体积如果存放文本 ...

  3. uniapp解决测评有组件导出风险,解决APP反编译,回编译后app无法打开的问题

    1.APP反编译 使用hbx云打包,打包出apk 拿到apk后,先下载反编译工具 https://pan.baidu.com/s/1A5D8x_pdSELlHYl-Wl6Xnw 提取码 6vzd 使用 ...

  4. [数据结构]严蔚敏版(C数据结构)配套实现程序111例

    以下为根据严蔚敏版数据结构的示例和概念实现的程序 目录 一.严蔚敏版(C数据结构)配套实现程序111例 1.数组与字符串 2.栈与队列 3.链表LinkList 4.树与二叉树 5.排序相关算法 6. ...

  5. Struts2中通过Ajax传递json数据

    1.导入Struts2所需要的jar包 下载Struts2的jar包时,可以下载struts-2.5.13-min-lib.zip,然后放到项目的/WebContent/WEB-INF/lib路径下s ...

  6. sqlsugar freesql hisql 三个ORM框架性能测试对比

    hisql与目前比较流行的ORM框架性能测试对比 总体测试结果 插入记录数 hisql(耗时) sqlsugar(耗时) freesql(耗时) 5条 0.0107秒 0.0312秒 0.02675秒 ...

  7. 初识python 之 ImportError: No module named _ssl

    场景 安装好python之后,导入ssl模块报错: ImportError: No module named _ssl 解决方法 查看openssl.openssl-devel是否安装 rpm -qa ...

  8. vim 安装使用 pathogen

    目录 pathogen 是什么? 如何安装? pathogen 是什么? pathogen 一般作为 vim 新手的第一个插件,用来统一管理 vim 插件包. (官方解释)非常容易地管理你的 'run ...

  9. 曾经大量使用的Model1开发模式,虽不常用,但可以帮我们理解JSP

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6513394762370777604/ 1.<JSP页面实际上就是Servlet> 2.<JSP页 ...

  10. JAVA之内存结构

    概述 JAVA是我们现在最常用的开发语言,而他的垃圾回收机制(Garbage Collection)的重要作用不言而喻,以下简称GC,所以了解GC至关重要,现本人对于GC机制以前的理解和现在的理解记录 ...