python学习-Day30

今日内容详细
作业讲解
编写元类规定对象的所有数据值转大写
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的更多相关文章
- Python学习--04条件控制与循环结构
Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...
- Python学习--01入门
Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...
- Python 学习小结
python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...
- Python学习路径及练手项目合集
Python学习路径及练手项目合集 https://zhuanlan.zhihu.com/p/23561159
- python学习笔记-python程序运行
小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...
- Python学习记录day6
title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...
- Python学习记录day5
title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...
- [Python] 学习资料汇总
Python是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大且完善的通用型语言,已经有十多年的发展历史,成熟且稳定.Python 具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用 ...
- Python学习之路【目录】
本系列博文包含 Python基础.前端开发.Web框架.缓存以及队列等,希望可以给正在学习编程的童鞋提供一点帮助!!! 目录: Python学习[第一篇]python简介 Python学习[第二篇]p ...
随机推荐
- leetcode210.拓扑排序
拓扑排序能否成功,其实就是看有没有环 有环:说明环内结点互为前置,永远也不可能完成 无环:是线性的,可以完成 DFS方法 思路: 逆向思维,遍历到边界点(无邻接点相当于叶子),再不断回溯将结点加入到结 ...
- Postman请求报错:Error:getaddrinfo ENOENT 50.88.88.88
一.问题来源 今天发布一个新开发的项目到通州现场,内容是开放几个接口给第三方调用,需要现场部署的同事使用postman调用测试一下,现场同事使用postman调用后反馈有如下错误: 二.解决方法 发现 ...
- myisamchk 是用来做什么的?
它用来压缩 MyISAM 表,这减少了磁盘或内存使用. MyISAM Static 和 MyISAM Dynamic 有什么区别? 在 MyISAM Static 上的所有字段有固定宽度.动态 MyI ...
- Mybatis框架基础入门(六)--动态sql
主要是通过mybatis提供的各种标签方法实现动态拼接sql. 1.if标签 <!-- 根据条件查询用户 --> <select id="queryUserByWhere& ...
- 学习Kvm(三)
虚拟化(将一个物理硬件平台虚拟成多个) vmware(模拟出一堆硬件设备,每一个硬件设备都是独立平台) 虚拟化要解决的问题(硬件之上的OS,有用户空间.内核空间:vmware虚拟机所模拟出的多个硬件平 ...
- SVN在idea中操作解析图
进入的位置
- AWS 6R
"The 6 R's": 6 Application Migration Strategies "The 6 R's": 6 Application Migra ...
- 可想实现一个自己的简单jQuery库?(五)
Lesson-4 这个版本我们要增加一个用的非常多的方法! 那就是each! 我们知道each不仅能遍历数组,还能遍历对象. 首先我们需要一个对数组进行验证的方法 function isArray(o ...
- 首次写iPad布局感想(H5)
一直做前端工作,却从来没有开发过平板的项目,想来也是有遗憾的,孰知,新公司的第二个项目就是要适配平板,刚开始是懵的,对于兼容,感觉是自己的短板,但庆幸的是这一版只需要兼容iOS系统就可以. 那我现在就 ...
- 微信小程序 使用filter过滤器几种方式
由于微信小程序 技术生态比较闭合,导致很多 现代前端框架很多积累出的成果都没有实现(可能未来会逐一实现). 用惯了现代 再耍小程序 总感觉很不顺手. 需要结果的请直接看最后的WXS View Filt ...