选课系统(一)

选课系统(一)


昨日内容回顾


反射

同时遇到字符串与对象时,反射是最好的操作方式


面向对象的双下方法

1.__init__  实例化执行
2.__str__  对象执行打印操作时执行,只能返回字符串类型的数据
3.__del__  对象执行完自动删除或者主动删除湖执行
4.__getattr__  对象查找不存在的名字时执行
5.__setattr__  对象在设置属性(对象.变量名=变量值)时执行
6.__getattribute__  对象查找名字就会执行,不管该名字是否存在
7.__enter__  对象执行with open 时执行,返回什么as后面的变量名就会获得什么
8.__exit__  对象执行with open 结束时执行
9.__call__  对象被加括号调用时执行,该方法返回什么,调用的结果就是什么

元类简介

type就是元类,元类就是创建类的类

class创建类底层也是由type创建的

产生类的三要素:类名,父类,类的名称空间


元类的基本使用

元类无法直接继承,需要用关键字
class MyClass(type):
  pass

class MyTypeClass(metaclass=MyClass):
  pass

元类的深入使用

1.__new__  # 底层产生一块空间
2.__call__  # 赋予基本的框架
3.__init__  # 实际产生


今日内容概要


作业重点

定制类的产生,需要针对产生类的三要素做判断

class MyTypeClass(type):  # 定义一个类接受父类type
    def __call__(self, *args, **kwargs):  # 重写__call__功能
        args = [i.upper() for i in args]  # 循将用户输入转成大写
        return super().__call__(*args, **kwargs)  # 重新调用原来的__call__方法
class MyClass(metaclass=MyTypeClass):  # 定义一个接受了type的父类的类
    def __init__(self, name, gender):  # 用户输入参数都经过了转换
        self.name = name
        self.gender = gender
    def __setattr__(self, key, value):  # 增加数据功能
        self.__dict__[key] = value.upper()

设计模式

IT行业中总共有23种设计模式

设计模式是由前辈积累的知识,针对问题做出的对应解决方法

目前我们只需要先了解一下设计模式之单列是什么

单例模式的意思是一个类只能产生一个对象
经过测试,循环加计数器不行

now方法
class Singleton(object):
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, '_instance'):
            orig = super(Singleton, cls)
            cls._instance = orig.__new__(cls)
        return cls._instance

class MyClass(Singleton):
    def __init__(self, name):
        self.name = name

主要都是由检测对象是否为空,如果不为空证明已经实例化。

pickle模块

功能不强,兼容性较差,仅仅是不会ORM的一个过度使用模块

功能:将对象保存到文件 并且取出来之后还可以使用对象的功能

使用语法

# with open(r'%s'%obj.name,'wb') as f:
#     pickle.dump(obj, f)

选课系统项目分析

  1. 三层架构

    1. 1.展示层

      选课系统项目的主要攻克点就在于展示层,不同的类需要不同的展示层,每个类的展示页面都要独立出来,来确定不同人员的使用

    2. 2.逻辑层

      在选课系统中的逻辑层相较于ATM购物车反而更简单,因为其主要增删改查功能我们早就在ATM购物车中反复练习过

    3. 3.数据层

      数据层也不复杂,复杂的存储数据功能我们已经反复练习过,只需要针对不同的类去获取类名,产生出相对于的数据文件夹即可

      # 如何通过对象获取类对应的字符串名称
      对象 = 类()
      # 固定方法
      print(变量名.__class__)  # <class '__main__.类名'>    类名
      print(变量名.__class__.__name__)  # 类名              字符串
      

posted @   Eason辰  阅读(56)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示