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. 进程池的回调函数callback

    如下代码: from multiprocessing import Pool def func1(n): print('in func1') return n*n def func2(nn): pri ...

  2. mybatis06--动态sql

    1.if标签 public interface StudentDao { /** *动态sql的查询 参数是Student对象 不确定 用户输入几个属性值 */ List<Student> ...

  3. hibernate03增删改查

    <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hiber ...

  4. laravel5.4+vue+element简单搭建(gulp+laravel Elixir)(转)

    如今laravel来到5.4版本,更方便引入vue了,具体步骤如下: 下图为我动到的文件 1.下载laravel5.4 2.命令行(laravel5.4目录下):composer install 3. ...

  5. Javaweb实现对mongodb的增删改查(附带源代码)

    运行截图: 删除后的信息 项目源代码:https://www.cnblogs.com/post/readauth?url=/zyt-bg/p/9807396.html

  6. MUI学习01-顶部导航栏

    建议:先看一下MUI注意事项 连接:http://ask.dcloud.net.cn/article/122 固定栏靠前 所谓的固定栏,也就是带有.mui-bar属性的节点,都是基于fixed定位的元 ...

  7. .NET Core 2.1 源码学习:看 SocketsHttpHandler 如何在异步方法中连接 Socket

    在 .NET Core 2.1 中,System.Net.Sockets 的性能有了很大的提升,最好的证明是 Kestrel 与 HttpClient 都改为使用 System.Net.Sockets ...

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

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

  9. php 连接 数据库

    $mysql_server_name='localhost'; //改成自己的mysql数据库服务器 $mysql_username='root'; //改成自己的mysql数据库用户名 mysql默 ...

  10. axios实现拦截器

    项目中通常使用token进行用户权限认证,需要在请求的header中添加token信息进行验证,拦截返回的状态码进行跳转或重新登陆,在全局配置这些不妥,所以新建一个axios实例进行项目的配置. // ...