选课系统(一)
选课系统(一)
昨日内容回顾
反射
同时遇到字符串与对象时,反射是最好的操作方式
面向对象的双下方法
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.展示层
选课系统项目的主要攻克点就在于展示层,不同的类需要不同的展示层,每个类的展示页面都要独立出来,来确定不同人员的使用
-
2.逻辑层
在选课系统中的逻辑层相较于ATM购物车反而更简单,因为其主要增删改查功能我们早就在ATM购物车中反复练习过
-
3.数据层
数据层也不复杂,复杂的存储数据功能我们已经反复练习过,只需要针对不同的类去获取类名,产生出相对于的数据文件夹即可
# 如何通过对象获取类对应的字符串名称 对象 = 类() # 固定方法 print(变量名.__class__) # <class '__main__.类名'> 类名 print(变量名.__class__.__name__) # 类名 字符串
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)