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中的抽象类
1 from abc import ABCMeta,abstractmethod 2 class Payment(metaclass=ABCMeta): #创造一个抽象类,不可以被实例化,没对象 3 @abstractmethod #装饰一个动作,使之成为规则,其子类不许有的规则 4 def pay(self): #规则可以有简单的动作,也可以直接pass 5 pass
创建子类,承受继承的规则,完成必须动作pay()
1 class Wechatpay(Payment): 2 def __init__(self,name,money): 3 self.name=name 4 self.money=money 5 def pay(self): 6 print('%s通过微信支付了%s'%(self.name,self.money)) 7 8 class Alipay(Payment): 9 def __init__(self,name,money): 10 self.name=name 11 self.money=money 12 def pay(self): 13 print('%s通过支付宝支付了%s' % (self.name, self.money)) 14 15 class Applepay(Payment): 16 def __init__(self, name, money): 17 self.name = name 18 self.money = money 19 def pay(self): 20 print('%s通过苹果支付了%s' % (self.name, self.money))
最后,做归一化处理
1 a2=Alipay('a2',300) 2 print(a2.__dict__) #>>>{'name': 'a2', 'money': 300} 3 a2.pay() #>>>a2通过支付宝支付了300 5 def pay(person): #归一化 6 person.pay() 7 pay(a2) #>>>a2通过支付宝支付了300
抽象类不能被实例化,没有init方法
命名元祖:
1 from collections import namedtuple 2 course=namedtuple('a',['name','price','period']) #>>>创建一个命名元祖a,他又3个属性 3 python=course('python',2000,'6month') #>>>创建一个类似实例化对象python 4 print(python.price) #>>>2000 #命名元祖可以通过名字.属性,获取相应值 5 6 prthon=course('python',13,'sd') #通过命名元祖修改属性值 7 print(prthon.price) #13