小练习

'''
定义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:wangkcday07
#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

  

  

原文地址:https://www.cnblogs.com/wangkc/p/7041122.html