• 第二十一天作业


    今日作业

    # 0、课堂代码理解,并敲两遍以上 (技术的牛逼是靠量的积累)
    '''
    1、定义MySQL类(参考答案:
    	  1.对象有id、host、port三个属性
    	  
    	  2.定义工具create_id,在实例化时为每个对象随机生成id,保证id唯一
    	  
    	  3.提供两种实例化方式,方式一:用户传入host和port 方式二:从配置文件中读取host和port进行实例化
    	  
    	  4.为对象定制方法,save和get_obj_by_id,save能自动将对象序列化到文件中,文件路径为配置文件中DB_PATH,文件名为id号,保存之前验证对象是否已经存在,若存在则抛出异常,;get_obj_by_id方法用来从文件中反序列化出对象
    '''
    import uuid
    import os
    import settings
    import pickle
    
    
    # 1、定义MySQL类
    # 对象有id、host、port三个属性
    class MySql:
        def __init__(self, host, port):
            self.host = host
            self.port = port
            self.id = self.creat_id()
    
        # 随机生成id,保证id唯一
        @staticmethod
        def creat_id():
            return str(uuid.uuid1())
    
        # 从配置文件中读取host和port进行实例化
        @classmethod
        def from_conf(cls):
            print(cls)
            return cls(settings.HOST, settings.PORT)
    
        @property
        def is_excited(self):
            tag = True
            files = os.listdir(settings.DB_PATH)
            print(files)
            for file in files:
                if not file.endswith('.pkl'):
                    continue
                file_abspath = r'%s%s%s' % (settings.DB_PATH, os.sep, file)
                print(settings.DB_PATH)
                print(file_abspath)
                obj = pickle.load(open(file_abspath, 'rb'))
    
                if self.host == obj.host and self.port == obj.port:
                    tag = False
                    break
            return tag
    
        def save(self):
            if not self.is_excited:
                raise PermissionError('对象已存在')
            file_path = r'%s%s%s.pkl' % (settings.DB_PATH, os.sep, self.id)
            pickle.dump(self, open(file_path, 'wb'))
    
        @staticmethod
        def get_obj_by_id(id):
            file_abspath = r'%s%s%s.pkl' % (settings.DB_PATH, os.sep, id)
            return pickle.load(open(file_abspath, 'rb'))
    
    
    conn1 = MySql('127.0.0.1', 3306)
    # conn1.save()
    print(conn1.get_obj_by_id('4bf9b422-ec36-11e9-a936-fc3fdb5efe9f').__dict__)
    
    
    
    # 2、定义一个类:圆形,该类有半径,周长,面积等属性,将半径隐藏起来,将周长与面积开放
    
    class Round:
        def __init__(self,bj):
            self.__bj = bj
        # 计算周长
        @property
        def zc(self):
            return 2*3.16*self.__bj
        # 计算面积
        @property
        def mj(self):
            return 3.14*(self.__bj**2)
    
    
    r = Round(3)
    
    print(r.zc)
    print(r.mj)
    
    print(r._Round__bj)
    		
    	
    # 3、使用abc模块定义一个phone抽象类 并编写一个具体的实现类
    import abc
    
    
    class Phone(metaclass=abc.ABCMeta):
        @abc.abstractmethod
        def call(self):
            print('打电话')
    
        @abc.abstractmethod
        def send_email(self):
            print('发信息')
    
        @abc.abstractmethod
        def photo(self):
            print('拍照片')
    
    
    class MiPhone(Phone):
        def call(self):
            print('我也能打电话')
    
        def send_email(self):
            print('我也能发短息')
    
        def photo(self):
            print('我也能拍照片')
    
    
    
    
    
  • 相关阅读:
    Leetcode
    算法
    手写代码注意点 -- HashMap
    Batch
    Batch
    Tomcat
    微服务
    Java 基础
    Maven
    算法
  • 原文地址:https://www.cnblogs.com/lyyblog0715/p/11657564.html
Copyright © 2020-2023  润新知