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. 网关鉴权后下游统一filter获取用户信息

    1. 场景描述 最近有点忙,在弄微服务nacos+springcloud gateway这块工作,以前只是简单应用,这次因为要对接10几个系统或者平台,还的鉴权,等后续稍微闲点了,把这块东西总结下. ...

  2. pycharm使用sublime/boxy配色方案

    # 展示效果图 1. github官网连接:https://github.com/simoncos/pycharm-monokai 2.克隆代码并解压文件 3.PyCharm -> File - ...

  3. ASP.NET 服务端接收Multipart/form-data文件

    在网络编程过程中需要向服务器上传文件. Multipart/form-data是上传文件的一种方式. /// <summary> /// 上传工程文件 /// </summary&g ...

  4. 波士顿房价预测 - 最简单入门机器学习 - Jupyter

    机器学习入门项目分享 - 波士顿房价预测 该分享源于Udacity机器学习进阶中的一个mini作业项目,用于入门非常合适,刨除了繁琐的部分,保留了最关键.基本的步骤,能够对机器学习基本流程有一个最清晰 ...

  5. FastDfs之TrackerServer的详细配置介绍

    # is this config file disabled # false for enabled # true for disabled disabled=false #当前配置是否不可用fals ...

  6. Windows搭建MongoDB复制集

    ​上篇,我们已经知道了什么是MongoDB的复制集,不知道的可以查看上篇哦,传送门来了. 光说不练,假把式,咱来自己搭建一个复制集.先下载安装哦,不知道的查看上篇哦,https://blog.csdn ...

  7. SUSE CaaS Platform 4 - 使用 Ceph RBD 作为持久存储(动态)

    图1 架构图 图2 各存储插件对动态供给方式的支持状况 1.所有节点安装 # yum install ceph-common 复制 ceph.conf 到 worker 节点上 # scp admin ...

  8. gitblit在windows10上的安装及服务启动报错处理

    折腾一下午算是装好了,心情不错决定分享一下.安装步骤大同小异网上都有,主要是Failed creating java 这个报错,百度出来的没有一个能给我解决的,摸索半天找出一个自己的方式.为报错而来的 ...

  9. MongoDB 学习笔记之 批处理

    批处理: MongoDB批处理方式有2种, 有序插入(有序仍是顺序处理的.发生错误就停止.) 无序插入(无序列表会将操作按类型分组,来提高性能,因此,应确保应用不依赖操作执行顺序.发生错误继续处理剩余 ...

  10. redis安装及简单使用

    前言 一般企业级开发,数据库用的都是关系型数据库Mysql.Oracle及SqlServer.无一例外,在开发过程中,我们都必须通过数据库驱动来连接到数据库,之后才可以完成对数据库的增删改查等业务.而 ...