内容概要
- 面向对象练习
- 设计模式简介
- 设计模式之单例模式
- pickle模块
面向对象练习
| '''编写元类规定对象的所有数据转为大写''' |
| eg: |
| obj.name = 'Tom' |
| print(obj.name) |
| |
| 1. 重新元类Type的双下方法 以双下call为例 |
| class MyTypeClass(type): |
| def __call__(self, *args, **kwargs): |
| args = [i.upper() for i in args] |
| return super().__call__(*args, **kwargs) |
| |
| class MyClass(metaclass=MyTypeClass): |
| def __init__(self, name,gender): |
| self.name = name |
| self.gender = gender |
| obj = MyClass('Tom','male') |
| print(obj.name,obj.gender) |
| |
| 2. 直接将对象的值改为大写 |
| class MyClass(object): |
| def __init__(self, name,gender): |
| self.name = name |
| self.gender = gender |
| |
| def __setattr__(self, key, value): |
| |
| self.__dict__[key] = value.upper() |
| |
| obj = MyClass('Tom','male') |
| print(obj.name,obj.gender) |
| |

设计模式简介
| 在IT行业中设计模式总共有23种 可以分为三大类 |
| 1.创建型 |
| 2.结构型 |
| 3.行为型 |
| |
| 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。 |
| 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。 |
| 这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 |
| """ |
| 设计模式是前辈们发明的经过反复验证用于解决固定问题的固定套路 |
| """ |
| |
| |
设计模式之单例
| |
| 单例模式的意思是一个类只能产生一个对象 用于节省资源 |
| 应用场景: |
| 有一个类中有很多非常牛逼的绑定给对象的方法 |
| 我们需要在很多地方使用它 那么不同的程序员来用不知道有没有产生对象 |
| 所以自己会创建一个新对象 如此往复则会造成资源的浪费 |
| 如何实现: |
| 我们需要在类实例化对象的时候进行干涉 >>>: 元类 |
| 单例模式:(可以有很多种编写方式) |
| class Single(type): |
| new_obj = None |
| def __call__(self, *args, **kwargs): |
| |
| if not self.new_obj: |
| |
| obj = super().__call__(*args, **kwargs) |
| self.new_obj = obj |
| return self.new_obj |
| |
| return self.new_obj |
| |
| |
| class MyClass(metaclass=Single): |
| def __init__(self, name): |
| self.name = name |
| |
| |
| obj1 = MyClass('jason') |
| obj2 = MyClass('tony') |
| print(id(obj1), id(obj2)) |
| print(obj1.__dict__, obj2.__dict__) |
| |
| '''单例的实现方式不固定 有很多种''' |
| 其他单例的实现参考:https://www.cnblogs.com/Dominic-Ji/p/10525994.html |

pickle模块
| """ |
| 将该模块的目的仅仅是为了在选课系统中使用 后期会学习ORM就不会用pickle了 |
| 并且该模块只支持python 兼容性很差!!! |
| """ |
| 需求:将对象保存到文件 并且取出来之后还可以使用对象的功能 |
| import pickle |
| |
| class MyClass(object): |
| school = 'school' |
| def __init__(self, name): |
| self.name = name |
| def choose_course(self): |
| print('%s正在选课'%self.name) |
| obj = MyClass('jason') |
| print(obj.school) |
| obj.choose_course() |
| |
| |
| |
| |
| |
| with open(r'jason','rb') as f: |
| data = pickle.load(f) |
| print(data) |
| print(data.name) |
| print(data.school) |
| |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?