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模块应用场景优化的更多相关文章

  1. CSIC_716_20191118【常用模块的用法 Json、pickle、collections、openpyxl】

    序列化模块 序列化:将python或其他语言中的数据类型,转变成字符串类型. python中的八大数据类型回顾:int float str list tuple dict set bool 反序列化: ...

  2. json模块 pickle 模块 collections 模块 openpyxl 模块

    json模块 json 模块是一个系列化模块 一个第三方的特殊数据格式 可以将python数据类型----> json 数据格式 ----> 字符串 ----> 文件 其他语言想要使 ...

  3. python collections模块

    collections模块基本介绍 collections在通用的容器dict,list,set和tuple之上提供了几个可选的数据类型 namedtuple() factory function f ...

  4. (转)python collections模块详解

    python collections模块详解 原文:http://www.cnblogs.com/dahu-daqing/p/7040490.html 1.模块简介 collections包含了一些特 ...

  5. day13 函数模块之序列化 random 模块 os模块 sys模块 hashlib模块 collections模块

    json import json dic = {'k1':'v1','k2':'v2','k3':'v3'} str_dic = json.dumps(dic) #序列化:将一个字典转换成一个字符串 ...

  6. 模块二之序列化模块以及collections模块

    模块二之序列化模块以及collections模块 一.序列化模块 json模块 ''' 序列化:将python或其他语言的数据类型转换成字符串类型 json模块: 是一个序列化模块. json: 是一 ...

  7. 常用模块(collections模块,时间模块,random模块,os模块,sys模块,序列化模块,re模块,hashlib模块,configparser模块,logging模块)

    认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的 ...

  8. collections模块、时间模块、random模块、os模块、sys模块、序列化模块、subprocess模块

    一.collections模块 1.其他数据类型 在内置数据类型(str.dict.list.tuple.set)的基础上,collections模块还提供了了几个额外的数据类型:Counter.de ...

  9. 再谈collections模块defaultdict()和namedtuple()

    defaultdict()和namedtuple()是collections模块里面2个很实用的扩展类型.一个继承自dict系统内置类型,一个继承自tuple系统内置类型.在扩展的同时都添加了额外的很 ...

随机推荐

  1. QT上位机

    程序是用QT写的,通过COM口进行数据的读取. 源码地址:https://github.com/kunkunlin/QT-SWJ

  2. hibernate05--list和iterator

    package cn.bdqn.test; import java.util.Iterator; import java.util.List; import org.hibernate.Query; ...

  3. JWT(Json Web Token—)的定义及组成

    JWT定义及其组成 JWT(JSON Web Token)是一个非常轻巧的规范.这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息. 一个JWT实际上就是一个字符串,它由三部分组成,头部. ...

  4. 18、MySQL

    ++主键(primary key) 能够唯一标识表中某一行的属性或属性组++.==一个表只能有一个主键==,但可以有多个候选索引.==主键可以保证记录的唯一==和==主键域非空==,数据库管理系统对于 ...

  5. 文文---Set,Map

    Set和Map Set:类似数组 成员的值是唯一的 下有 add(),has(),delete(),clear(),size 等方法 Map:类似于对象 成员的值是唯一的 下有 set(),has() ...

  6. js中级小知识4

    1.针对表单 form   input     select      textarea type="radio/checkbox/passdord/button/submit/reset/ ...

  7. 安装配置Spark集群

    首先准备3台电脑或虚拟机,分别是Master,Worker1,Worker2,安装操作系统(本文中使用CentOS7). 1.配置集群,以下步骤在Master机器上执行 1.1.关闭防火墙:syste ...

  8. 洛谷P3455 ZAP-Queries [POI2007] 莫比乌斯反演+数论分块

    正解:莫比乌斯反演 解题报告: 传送门! 首先这题刚看到就很,莫比乌斯反演嘛,和我前面写了题解的那个一模一样的,所以这儿就不讲这前边的做法辣QAQ 但是这样儿还有个问题,就现在已知我每次都是要O(n) ...

  9. [js]es6语法: 字符串和数组的方法

    s的方法 根据index取value: 取首尾项,arr[0], arr[arr.length-1] 根据value取index(判断是否包含子字符串): s.indexOf 栗子: 'maotai' ...

  10. GlusterFS配置及使用

    一.GlusterFS 配置及使用 GlusterFS配置及使用:https://www.cnblogs.com/sxchengchen/p/7805667.html 二.CentOS 7 安装部署 ...