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. CentOS 7.0关闭服务器的防火墙服务命令

    1.直接关闭防火墙systemctl stop firewalld.service #停止firewallsystemctl disable firewalld.service #禁止firewall ...

  2. Web前端攻击方式及防御措施

    一.XSS [Cross Site Script]跨站脚本攻击 恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户 ...

  3. 【C++ 模板迭代器实例/半素数】

    题目:判断一个数是不是两个素数的乘积,是输出YES,不是输出NO.数据范围为2-1000000. 为了解决这个问题,我们继续使用STL——vector & set,分别用来存储素数和半素数.为 ...

  4. return & finally 执行顺序 这是我读到的最合理的解释

    新词:return [expression]  栈顶元素 局部变量的快照 java方法是在栈幀中执行,栈幀是线程私有栈的单位,执行方法的线程会为每一个方法分配一小块栈空间来作为该方法执行时的内存空间, ...

  5. node.js+ react + redux 环境搭建

    1.安装node.js 2. yarn init: 初始化,主要包含以下条目 name: 项目名 version: 版本号 description: 项目简要描述 entry point: 文件入口, ...

  6. Python学习之旅(十)

    Python基础知识(9):函数(Ⅰ) Python中函数的定义:是逻辑结构和过程化的一种编程方法 定义方法: def test(x): #def:定义函数的关键字 test:函数名 x:形参,也可以 ...

  7. BOM设计的一些问题及解决方案探讨----合版BOM

    BOM是ERP的核心资料,也是比较难的一块,不仅涉及的内容多,要求准确性高,时效性也要求高.但传统的ERP在处理BOM时有不少问题,因此也有些软件公司引入了各种BOM类型,像"标准BOM&q ...

  8. [No0000152]C#基础之IL,轻松读懂IL

    先说说学IL有什么用,有人可能觉得这玩意平常写代码又用不上,学了有个卵用.到底有没有卵用呢,暂且也不说什么学了可以看看一些语法糖的实现,或对.net理解更深一点这些虚头巴脑的东西.其实IL本身逻辑很清 ...

  9. 【转载】word2vec原理推导与代码分析

    本文的理论部分大量参考<word2vec中的数学原理详解>,按照我这种初学者方便理解的顺序重新编排.重新叙述.题图来自siegfang的博客.我提出的Java方案基于kojisekig,我 ...

  10. Cocoa 框架 For iOS(一) 框架的介绍,Objectivie-C运行时能力的解析等 (转载)

    http://blog.csdn.net/totogo2010/article/details/8081253 Cocoa框架是iOS应用程序的基础,了解Cocoa框架,对开发iOS应用有很大的帮助. ...