学习类后回顾pickle及collections模块应用场景优化
1.首先创建一个类,并给出一个对象
class Dog(object):
def __init__(self,name,kind,age):
self.name=name
self.kind=kind
self.age=age
jm=Dog('邻家大哥','金毛',3)
2.打开文件,用pickle.jump把对象转化为字节写入一个文件,可以查看是否创建文件,以及文件内是否有内容,在pcm也可以查看输出
import pickle
with open(r'd:\dog.txt','wb')as f:
pickle.dump(jm,f)
print(jm.__dict__) #>>>{'name': '邻家大哥', 'kind': '金毛', 'age': 3}
print(jm.name) #>>>'邻家大哥'
3.再次需要使用文件时,重新打开文件,读取内容
import pickle
with open(r'd:\dog.txt','rb')as f1:
jm=pickle.load(f1)
print(jm.__dict__) #>>>{'name': '邻家大哥', 'kind': '金毛', 'age': 3}
print(jm.kind) #>>>金毛
4.如果知道文件中数据对象数量,可以逐个命名,用多次pickle.load读取对象;
如果不知道文件中有多少数据对象,可用以下方法
import pickle
with open(r'd:\dog.txt','rb')ad f:
# jm1=pickle.load(f)
# jm2=pickle.load(f)
while 1:
try:
obj=pickle.load(f)
print(obj.__dict__)
except EOFError:
break
先创建一个(字典)类后,文件的读写用pickle方便简捷,多练多用
=====================================================================================================
二.collections模块中命名元祖与class类相似关系
class中,创建一个类,可以创建对象继承于类,与命名元祖相似,但是可以通过对象来修改属性,命名元祖却不行,类似于一个抽象类
先看看class中的抽象类
from abc import ABCMeta,abstractmethod
class Payment(metaclass=ABCMeta): #创造一个抽象类,不可以被实例化,没对象
@abstractmethod #装饰一个动作,使之成为规则,其子类不许有的规则
def pay(self): #规则可以有简单的动作,也可以直接pass
pass
创建子类,承受继承的规则,完成必须动作pay()
class Wechatpay(Payment):
def __init__(self,name,money):
self.name=name
self.money=money
def pay(self):
print('%s通过微信支付了%s'%(self.name,self.money)) class Alipay(Payment):
def __init__(self,name,money):
self.name=name
self.money=money
def pay(self):
print('%s通过支付宝支付了%s' % (self.name, self.money)) class Applepay(Payment):
def __init__(self, name, money):
self.name = name
self.money = money
def pay(self):
print('%s通过苹果支付了%s' % (self.name, self.money))
最后,做归一化处理
a2=Alipay('a2',300)
print(a2.__dict__) #>>>{'name': 'a2', 'money': 300}
a2.pay() #>>>a2通过支付宝支付了300
def pay(person): #归一化
person.pay()
pay(a2) #>>>a2通过支付宝支付了300
抽象类不能被实例化,没有init方法
命名元祖:
from collections import namedtuple
course=namedtuple('a',['name','price','period']) #>>>创建一个命名元祖a,他又3个属性
python=course('python',2000,'6month') #>>>创建一个类似实例化对象python
print(python.price) #>>>2000 #命名元祖可以通过名字.属性,获取相应值 prthon=course('python',13,'sd') #通过命名元祖修改属性值
print(prthon.price) #13
学习类后回顾pickle及collections模块应用场景优化的更多相关文章
- CSIC_716_20191118【常用模块的用法 Json、pickle、collections、openpyxl】
序列化模块 序列化:将python或其他语言中的数据类型,转变成字符串类型. python中的八大数据类型回顾:int float str list tuple dict set bool 反序列化: ...
- json模块 pickle 模块 collections 模块 openpyxl 模块
json模块 json 模块是一个系列化模块 一个第三方的特殊数据格式 可以将python数据类型----> json 数据格式 ----> 字符串 ----> 文件 其他语言想要使 ...
- python collections模块
collections模块基本介绍 collections在通用的容器dict,list,set和tuple之上提供了几个可选的数据类型 namedtuple() factory function f ...
- (转)python collections模块详解
python collections模块详解 原文:http://www.cnblogs.com/dahu-daqing/p/7040490.html 1.模块简介 collections包含了一些特 ...
- day13 函数模块之序列化 random 模块 os模块 sys模块 hashlib模块 collections模块
json import json dic = {'k1':'v1','k2':'v2','k3':'v3'} str_dic = json.dumps(dic) #序列化:将一个字典转换成一个字符串 ...
- 模块二之序列化模块以及collections模块
模块二之序列化模块以及collections模块 一.序列化模块 json模块 ''' 序列化:将python或其他语言的数据类型转换成字符串类型 json模块: 是一个序列化模块. json: 是一 ...
- 常用模块(collections模块,时间模块,random模块,os模块,sys模块,序列化模块,re模块,hashlib模块,configparser模块,logging模块)
认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的 ...
- collections模块、时间模块、random模块、os模块、sys模块、序列化模块、subprocess模块
一.collections模块 1.其他数据类型 在内置数据类型(str.dict.list.tuple.set)的基础上,collections模块还提供了了几个额外的数据类型:Counter.de ...
- 再谈collections模块defaultdict()和namedtuple()
defaultdict()和namedtuple()是collections模块里面2个很实用的扩展类型.一个继承自dict系统内置类型,一个继承自tuple系统内置类型.在扩展的同时都添加了额外的很 ...
随机推荐
- iOS - 数组字典模型根据模型属性key排序
方法一: NSArray *sortArray = [arrayM sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { ...
- Go语言基础之数据类型
Go语言基础之数据类型 Go语言中有丰富的数据类型,除了基本的整型.浮点型.布尔型.字符串外,还有数组.切片.结构体.函数.map.通道(channel)等.Go 语言的基本类型和其他语言大同小异. ...
- 怎么才能使服务器Nginx(或者Apache)支持字体文件
为了在前端正确地显示字体,浏览器必须使用正确的http header来接受字体文件.如果服务器没有设置要求的头信息,那么有些浏览器就会在控制台报错或者直接不能显示. 可能你的服务器已经配置好了,你无须 ...
- 24、设计模式、webpack
利用静态属性:长驻内存 (一) 单例模式 概念:单个实例,只有一个对象,多次创建,返回同一个对象. 单例模式的核心:==确保只有一个实例==,并提供全局访问. //利用了静态属性:长驻内存 funct ...
- Lucene入门学习二
接上篇:增删改查 增加:这里不做过多阐述. 删除:删除全部,根据条件删除 修该:先删除,后添加 查询(*):查询所有,精确查询,根据数值范围查询,组合查询,解析查询. package com.ithe ...
- Python学习之旅(二十一)
Python基础知识(20):错误.调试和测试 一.错误处理 在运行程序的过程中有可能会出错,一般我们会在添加一段代码在可能出错的地方,返回约定的值,就可以知道会不会出错以及出错的原因 1.使用try ...
- css学习_css清除浮动
若元素没有设置宽高,那元素实际宽高是被内容撑起来, 若元素自己有设置宽高,那实际面积于自己的盒子模型有关 1.清除浮动的本质 清除浮动主要是为了解决父级元素因为子级浮动而引起的内部高度为0的问题. ( ...
- AndrewNG Deep learning课程笔记 - CNN
参考, An Intuitive Explanation of Convolutional Neural Networks http://www.hackcv.com/index.php/archiv ...
- LeetCode 993 Cousins in Binary Tree 解题报告
题目要求 In a binary tree, the root node is at depth 0, and children of each depth k node are at depth k ...
- VUE 全局变量的几种实现方式
最近在学习VUE.js 中间涉及到JS全局变量,与其说是VUE的全局变量,不如说是模块化JS开发的全局变量. 1.全局变量专用模块 就是以一个特定模块来组织管理这些全局量,需要引用的地方导入该模块便好 ...