今日内容详细

作业讲解

编写元类规定对象的所有数据值转大写
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)

python学习-Day30的更多相关文章

  1. Python学习--04条件控制与循环结构

    Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...

  2. Python学习--01入门

    Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...

  3. Python 学习小结

    python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...

  4. Python学习路径及练手项目合集

    Python学习路径及练手项目合集 https://zhuanlan.zhihu.com/p/23561159

  5. python学习笔记-python程序运行

    小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...

  6. Python学习记录day6

    title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...

  7. Python学习记录day5

    title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...

  8. [Python] 学习资料汇总

    Python是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大且完善的通用型语言,已经有十多年的发展历史,成熟且稳定.Python 具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用 ...

  9. Python学习之路【目录】

    本系列博文包含 Python基础.前端开发.Web框架.缓存以及队列等,希望可以给正在学习编程的童鞋提供一点帮助!!! 目录: Python学习[第一篇]python简介 Python学习[第二篇]p ...

随机推荐

  1. leetcode210.拓扑排序

    拓扑排序能否成功,其实就是看有没有环 有环:说明环内结点互为前置,永远也不可能完成 无环:是线性的,可以完成 DFS方法 思路: 逆向思维,遍历到边界点(无邻接点相当于叶子),再不断回溯将结点加入到结 ...

  2. Postman请求报错:Error:getaddrinfo ENOENT 50.88.88.88

    一.问题来源 今天发布一个新开发的项目到通州现场,内容是开放几个接口给第三方调用,需要现场部署的同事使用postman调用测试一下,现场同事使用postman调用后反馈有如下错误: 二.解决方法 发现 ...

  3. myisamchk 是用来做什么的?

    它用来压缩 MyISAM 表,这减少了磁盘或内存使用. MyISAM Static 和 MyISAM Dynamic 有什么区别? 在 MyISAM Static 上的所有字段有固定宽度.动态 MyI ...

  4. Mybatis框架基础入门(六)--动态sql

    主要是通过mybatis提供的各种标签方法实现动态拼接sql. 1.if标签 <!-- 根据条件查询用户 --> <select id="queryUserByWhere& ...

  5. 学习Kvm(三)

    虚拟化(将一个物理硬件平台虚拟成多个) vmware(模拟出一堆硬件设备,每一个硬件设备都是独立平台) 虚拟化要解决的问题(硬件之上的OS,有用户空间.内核空间:vmware虚拟机所模拟出的多个硬件平 ...

  6. SVN在idea中操作解析图

    进入的位置

  7. AWS 6R

    "The 6 R's": 6 Application Migration Strategies "The 6 R's": 6 Application Migra ...

  8. 可想实现一个自己的简单jQuery库?(五)

    Lesson-4 这个版本我们要增加一个用的非常多的方法! 那就是each! 我们知道each不仅能遍历数组,还能遍历对象. 首先我们需要一个对数组进行验证的方法 function isArray(o ...

  9. 首次写iPad布局感想(H5)

    一直做前端工作,却从来没有开发过平板的项目,想来也是有遗憾的,孰知,新公司的第二个项目就是要适配平板,刚开始是懵的,对于兼容,感觉是自己的短板,但庆幸的是这一版只需要兼容iOS系统就可以. 那我现在就 ...

  10. 微信小程序 使用filter过滤器几种方式

    由于微信小程序 技术生态比较闭合,导致很多 现代前端框架很多积累出的成果都没有实现(可能未来会逐一实现). 用惯了现代 再耍小程序 总感觉很不顺手. 需要结果的请直接看最后的WXS View Filt ...