• day21


    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 hashlib,os,json
    from settings import*#导入一个配置文件
    class Mysql:
        def __init__(self,host,port):
    
            self.host = host
            self.port = port
    
        def create_id(self):
    
            m = hashlib.md5()
            lt = [self.host,self.port]
            id1 = ','.join(lt)
            m.update(id1.encode('utf-8'))
            return m.hexdigest()
        def save(self):
            path = os.path.join(DB_PATH, f'{self.create_id()}.json')
            if not os.path.exists(path):
                lt = [self.host, self.port]
    
                with open(path,'w',encoding='utf8') as fw:
                    json.dump(str(self),fw)
            else:
                raise PermissionError ('文件已经存在')
    
        def get_obj_by_id(self):
            path = os.path.join(DB_PATH, f'{self.create_id()}.json')
            if not os.path.exists(path):
                raise PermissionError ('文件不存在')
            with open(path,'r',encoding='utf8') as fr:
                read = json.load(fr)
                return read
    
    # user1 = Mysql(host,port)
    # print(user1.create_id())
    user2 = Mysql('xiaoming','xiaozhan')
    # print(user2.create_id())
    # #settings.py内容
    # #user1.save()
    # user2.save()
    print(user2.get_obj_by_id())
    

    2、定义一个类:圆形,该类有半径,周长,面积等属性,将半径隐藏起来,将周长与面积开放

    from math import pi
    
    
    class Circle:
        def __init__(self, radius):
            self.__radius = radius
    
        def area(self):
            are = (self.__radius ** 2) * pi
            return are
    
        def perimeter(self):
            peri = 2 * pi * self.__radius
            return peri
    

    3、使用abc模块定义一个phone抽象类 并编写一个具体的实现类

    class Phone(metaclass=abc.ABCMeta):
        @abc.abstractmethod
        def call(self):
            pass
    
        @abc.abstractmethod
        def play_game(self):
            pass
    
        @abc.abstractmethod
        def witch_vedio(self):
            pass
    
    
    class Miphone:
        def call(self):
            pass
    
        def play_game(self):
            pass
    
        def witch_vedio(self):
            pass
    
        def listen_music(self):
            pass
    
  • 相关阅读:
    bootstrap模态框
    css 禁止选中文本
    Python Flask Tornado
    JS canvas标签动态绘制图型
    JS 跳转页面
    JS 计算器
    JS
    柱状图中最大的矩形
    在不使用第三个变量的情况下交换两个数的值
    springboot配置静态资源访问的2种方式
  • 原文地址:https://www.cnblogs.com/ghylpb/p/11657123.html
Copyright © 2020-2023  润新知