小练习
''' 定义MySQL类 1、对象有id、host、port三个属性 2、定义工具create_id,在实例化时为每个对象随机生成id,保证id唯一 3、提供两种实例化方式,方式一:用户传入host和port方式 方式二:从配置文件中获取 4、为对象定制方法,save和get,save能自动将对象序列化到文件中,文件好为id,文件路径为配置 文件中DB_PATH,;get方法用来从文件中反序列化出对象 ''' #知识点: #1、str.encode('utf-8') 将字符串转换为字节码 decode() 将字节码转换为字符串 #2、hashlib.md5()是需要传入字节码类型的,之后调用其digest方法得到其hash值,或者调用其hexdigest()方法得到16进制的hash值 #3、settings.DB_PATH :显示该文件的目录 :F:\wangkc\day07 #4、os.sep 属性 :表示执行操作系统的文件分隔符 import settings,hashlib,time,os,pickle class MySQL: def __init__(self,host,port): self.id=self.create_id() self.host=host self.port=port @classmethod def from_conf(cls): return cls(settings.HOST,settings.PORT) @staticmethod def create_id(): m=hashlib.md5(str(time.clock()).encode('utf-8')) return m.hexdigest def save(self): file_name=r'%s%s%s' % (settings.DB_PATH,os.sep,self.id) pickle.dump(self,open(file_name,'wb')) def get(self): file_name=file_name=r'%s%s%s' % (settings.DB_PATH,os.sep,self.id) return pickle.load(open(file_name,'rb'))
''' 知识点: 1、__str__(self) 方法,在实例化对象后,直接打印对象,一般会打印出该对象的内存地址,在该类定义类__str__方法后 要打印对象首先会找到该方法,该方法会return 一个字符串类型的对象。以从中得到该对象的有用信息 2、@classmethod用法示例 3、time.localtime()获得时间后,用t.tm_year,t.tm_mon,t.tm_mday来获得具体的年、月、日 ''' import time class Date: def __init__(self,year,mon,day): self.year=year self.mon=mon self.day=day @classmethod def now(cls): t1=time.localtime() return cls(t1.tm_year,t1.tm_mon,t1.tm_mday) class EuroDate(Date): def __str__(self): return 'year:%s,mon:%s,day:%s' % (self.year,self.mon,self.day) p=EuroDate.now() print(p) #year:2017,mon:6,day:17