今日内容详细

作业讲解

编写元类规定对象的所有数据值转大写
eg:
obj.name = 'jason'
print(obj.name) # JASON 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
def __setattr__(self, key, value):
self.__dict__[key] = value.upper() obj = MyClass('jason', 'male')
print(obj.name)
print(obj.gender)
obj.hobby = 'jdb'
print(obj.hobby)

设计模式

在IT行业中设计模式总共有23种 可以分为三大类

1.创建型

2.结构型

3.行为型

单例模式

单例模式(Singleton 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

'''
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
'''

pickle模块

只能在python中使用,只支持python的基本数据类型,是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() # pickle可以
# with open(r'%s'%obj.name,'wb') as f:
# pickle.dump(obj, f) with open(r'jason','rb') as f:
data = pickle.load(f)
print(data)
print(data.name)
print(data.school)

最新文章

  1. 第三章 centos安装git
  2. ajax请求原理及jquery $.ajax封装全解析
  3. 如何生成excel文件作为图像识别结果
  4. java 接口(基础思想一)
  5. bzoj3996
  6. GridView、Repeater获取当前行号
  7. 通过代理访问nginx和直接访问nginx区别
  8. unable to find valid certification path to requested target
  9. java面向对象之 类和对象
  10. java多线程之yield()方法详解
  11. 解决backgroud:transparent在低版本浏览器中的bug
  12. java异常详解
  13. mysql中的limit
  14. shell的打印菜单
  15. 转码器ffmpeg安装
  16. word插入行
  17. FOB cost---从工厂到码头的费用
  18. POJ P3352 Road Construction 解题报告
  19. EventBus vs Otto vs Guava--自定义消息总线
  20. JS深拷贝/深克隆(面试用)

热门文章

  1. 如何用python裁剪图片
  2. 面试官:知道ThreadLocal嘛?谈谈你对它的理解?(基于jdk1.8)
  3. spring cloud 的核心组件有哪些?
  4. Dubbo 支持服务降级吗?
  5. IDEA 错误:程序包XXX不存在
  6. springboot项目中的日志输出
  7. UP9616移动电源快充案例
  8. CSS 文本控制
  9. AS之AlertDialog使用
  10. jboss学习4-jboss7开发配置指南