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方法用来从文件中反序列化出对象
# settings.py内容
"""
DB_PATH = 'F:\python12期\day 21\conf'
host = '114.114.114.1124'
port = 12234
"""

import pickle
import os
import hashlib
import time
import settings

class Mysql:
    def __init__(self,host,port):
        self.host = host
        self.port = port
        self.id = self.create_id()

    # 创建id
    def create_id(self):
        id_time = str(time.time())
        return  hashlib.md5(id_time.encode('utf-8')).hexdigest()

    # 判断文件中对象中的host和port是否和相同
    @property
    def id_exists(self):
        files = os.listdir(settings.DB_PATH)  # 列出路径中的所有文件生成列表
        for file in files:
            file_path = os.path.join(settings.DB_PATH, file)
            with open(file_path,'rb')as fr:
                obj = pickle.load(fr)
            if self.host == obj.host and self.port == obj.port:
                return False
        return True

    # 不加@classmethod的话,从配置文件调用时,需要把Mysql类名当作参数传入括号内
    # @classmethod  可以将让装饰函数把类当作第一个参数传入运行
    def from_settings(self):
        return self(settings.host, settings.port)

    def save(self):
        if self.id_exists:  # 这里会调用id_exists函数,返回出结果,不存在为True
            is_path = os.path.join(settings.DB_PATH,self.id)
            with open(is_path,'wb') as fw:
                pickle.dump(self,fw)
        else:
            raise PermissionError('对象已存在')

    # @staticmethod  # 可以将被装饰函数变成全局函数,即不需要声明传入self
    def get_obj_by_id(self):
        id_path = os.path.join(settings.DB_PATH,self.id)
        with open(id_path,'rb') as fr:
             print(pickle.load(fr).__dict__)

# sql = Mysql(11221,222222)
# sql.save()
# sql.get_obj_by_id()

aa =Mysql.from_settings(Mysql)
aa.save()
aa.get_obj_by_id()

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

import math
class Circle:
    def __init__(self,radius):
        self.__radius = radius

    @property
    def perimeter(self):
        return 2*math.pi* self.__radius

    @property
    def area(self):
        return math.pi*self.__radius**2

ss = Circle(10)
print(f'{ss.area:.2f}')
print(f'{ss.perimeter:.2f}')

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

import abc
class Phone(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def call(self):
        pass

    @abc.abstractmethod
    def message(self):
        pass

    @abc.abstractmethod
    def internet(self):
        pass

class Oneplus(Phone):
    def call(self):
        print('电话功能')

    def message(self):
        print('信息功能')

    def net(self):
        print('上网功能')

op7 = Oneplus()
op7.net()

day21作业的更多相关文章

  1. day21 作业

    1.定义MySQL类 1.对象有id.host.port三个属性 2.定义工具create_id,在实例化时为每个对象随机生成id,保证id唯一 3.提供两种实例化方式,方式一:用户传入host和po ...

  2. day21 计算器作业

    import re express = '1 - 2 * ( ( 6 0 -3 0 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4 ...

  3. Python全栈day21(作业针对一个文件进行查询修改删除的操作练习)

    需求,有一个配置文件test.conf内容如下 backend www1 server 1 server 2 backend www2 server 3 server 4 add [{'backend ...

  4. Spark Streaming揭秘 Day21 动态Batch size实现初探(下)

    Spark Streaming揭秘 Day21 动态Batch size实现初探(下) 接昨天的描述,今天继续解析动态Batch size调整的实现. 算法 动态调整采用了Fix-point迭代算法, ...

  5. python 作业

    Linux day01 计算机硬件知识整理 作业要求:整理博客,内容如下 编程语言的作用及与操作系统和硬件的关系 应用程序->操作系统->硬件 cpu->内存->磁盘 cpu与 ...

  6. python学习Day21

    目录 今日内容详细 作业讲解 os模块 知识点进修 创建目录(文件夹) 删除目录(文件夹) 查看某个路径下所有的文件名称(文件.文件夹) 删除文件.重命名文件 获取当前路径.切换路径 软件开发目录规范 ...

  7. python10作业思路及源码:类Fabric主机管理程序开发(仅供参考)

    类Fabric主机管理程序开发 一,作业要求 1, 运行程序列出主机组或者主机列表(已完成) 2,选择指定主机或主机组(已完成) 3,选择主机或主机组传送文件(上传/下载)(已完成) 4,充分使用多线 ...

  8. SQLServer2005创建定时作业任务

    SQLServer定时作业任务:即数据库自动按照定时执行的作业任务,具有周期性不需要人工干预的特点 创建步骤:(使用最高权限的账户登录--sa) 一.启动SQL Server代理(SQL Server ...

  9. 使用T-SQL找出执行时间过长的作业

        有些时候,有些作业遇到问题执行时间过长,因此我写了一个脚本可以根据历史记录,找出执行时间过长的作业,在监控中就可以及时发现这些作业并尽早解决,代码如下:   SELECT sj.name , ...

随机推荐

  1. Django REST Framework序列化器

    Django序列化和json模块的序列化 从数据库中取出数据后,虽然不能直接将queryset和model对象以及datetime类型序列化,但都可以将其转化成可以序列化的类型,再序列化. 功能需求都 ...

  2. Redis 集群(三)

    为什么为有集群 在 Redis3 版本之前,每台 Redis 机器需要存储所有 Redis key ,这要求每台 Redis 机器有足够大的内存 而且只能是主节点写,从节点读,对于高并发情况下会有性能 ...

  3. playframe 项目搭建

  4. Spring Cloud Gateway 使用

    简介 Spring Cloud Gateway是Spring Cloud官方推出的网关框架,网关作为流量入口,在微服务系统中有着十分重要的作用,常用功能包括:鉴权.路由转发.熔断.限流等. Sprin ...

  5. python线程实现异步任务

    了解异步编程 楼主在工作中遇到了以下问题,开发接口爬取数据代码完成之后要写入redis缓存,但是在写入缓存的过程花费2-3s,进行这样就大大影响了接口的性能,于是想到了使用异步存储. 传统的同步编程是 ...

  6. SpringBoot注入Service失败

    Description: The bean 'userService' could not be injected as a 'com.phy.hemanresoruce.service.UserSe ...

  7. mac下安装jmeter

    jmeter官网下载 双击解压 命令行进入/Users/yanguobin/apache-jmeter-5.1.1/bin目录下,输入sh jmeter即可启动 也可以 配置环境变量 vim ~/.b ...

  8. Linux入门(磁盘与挂载)

    Linux入门之 磁盘管理与挂载   在我们使用计算机或者是服务器时,总会需要接入外部存储的时候,正如我们使用的移动硬盘.U盘.接入手机等,就是一个接入外部存储的过程.上述这些在接入Windows时我 ...

  9. mongodb完整安装

    在线下载安装依赖包 yum -y install gcc gcc-c++ yum -y install gcc gcc-c++ ncurses ncurses-devel cmake bison yu ...

  10. 网页布局——Box盒子

    在移动端开发的时候,圣杯布局,弹性盒,是我们经常会用得到的,W3C很久以前就有一个display:box属性 flex是最新的,但是在实际的浏览器测试中,display: flex 不能完全替代dis ...