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. 品Spring:负责bean定义注册的两个“排头兵”

    别看Spring现在玩的这么花,其实它的“筹码”就两个,“容器”和“bean定义”. 只有先把bean定义注册到容器里,后续的一切可能才有可能成为可能. 所以在进阶的路上如果要想走的顺畅些,彻底搞清楚 ...

  2. Java入门系列之hashCode和equals(十二)

    前言 前面两节内容我们详细讲解了Hashtable算法和源码分析,针对散列函数始终逃脱不掉hashCode的计算,本节我们将详细分析hashCode和equals,同时您将会看到本节内容是从<E ...

  3. .NET Core应用的三种部署方式

    .NET Core应用提供了三种部署方式: FDD FDD:Framework-dependent deployment,框架依赖部署.这种方式针对某个特定版本的.NET Core进行发布,只打包应用 ...

  4. (java实现)单向循环链表

    什么是单向循环链表 单向循环链表基本与单向链表相同,唯一的区别就是单向循环链表的尾节点指向的不是null,而是头节点(注意:不是头指针). 因此,单向循环链表的任何节点的下一部分都不存在NULL值. ...

  5. ubuntu13启动屏幕亮度0解决方法

    在终端输入: sudo gedit /etc/default/grub 找到 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" GRUB_CMDL ...

  6. eclipse与hadoop集成,运行wordCount1

    搭好了hadoop集群之后,就该使用它了 第一步:下载hadoop eclipse的插件,将它放到eclipse\plugins的目录下,然后重启eclipse,点击windows->show ...

  7. SpringBootSecurity学习(14)前后端分离版之 OAuth2.0介绍

    登录总结 前面基本介绍了security的常规用法,同时介绍了JWT和它的一个简单实现,基本上开发中遇到的登录问题都能解决了,即使在分布式开发,或者微服务开发中实现登录也基本没有问题了.securit ...

  8. 快学Scala 第二十课 (trait的构造顺序)

    trait的构造顺序: 首先调用超类构造器 特质构造器在超类构造器之后,类构造器之前执行 特质从左向右被构造 每个特质当中,父特质先被构造 如果多个特质共有一个父特质,而那个父特质已经被构造,则不会被 ...

  9. Flutter学习笔记(29)--Flutter如何与native进行通信

    如需转载,请注明出处:Flutter学习笔记(29)--Flutter如何与native进行通信 前言:在我们开发Flutter项目的时候,难免会遇到需要调用native api或者是其他的情况,这时 ...

  10. JavaScript中闭包的使用和各种继承介绍

    一.什么是闭包?     (1)闭包的概念:a.闭包就是函数嵌套时,让局部变量变成自由变量的环境,是一种让局部变量进化的方式.                 b.定义在一个函数内部的函数.      ...