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方法用来从文件中反序列化出对象
# 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作业的更多相关文章
- day21 作业
1.定义MySQL类 1.对象有id.host.port三个属性 2.定义工具create_id,在实例化时为每个对象随机生成id,保证id唯一 3.提供两种实例化方式,方式一:用户传入host和po ...
- 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 ...
- Python全栈day21(作业针对一个文件进行查询修改删除的操作练习)
需求,有一个配置文件test.conf内容如下 backend www1 server 1 server 2 backend www2 server 3 server 4 add [{'backend ...
- Spark Streaming揭秘 Day21 动态Batch size实现初探(下)
Spark Streaming揭秘 Day21 动态Batch size实现初探(下) 接昨天的描述,今天继续解析动态Batch size调整的实现. 算法 动态调整采用了Fix-point迭代算法, ...
- python 作业
Linux day01 计算机硬件知识整理 作业要求:整理博客,内容如下 编程语言的作用及与操作系统和硬件的关系 应用程序->操作系统->硬件 cpu->内存->磁盘 cpu与 ...
- python学习Day21
目录 今日内容详细 作业讲解 os模块 知识点进修 创建目录(文件夹) 删除目录(文件夹) 查看某个路径下所有的文件名称(文件.文件夹) 删除文件.重命名文件 获取当前路径.切换路径 软件开发目录规范 ...
- python10作业思路及源码:类Fabric主机管理程序开发(仅供参考)
类Fabric主机管理程序开发 一,作业要求 1, 运行程序列出主机组或者主机列表(已完成) 2,选择指定主机或主机组(已完成) 3,选择主机或主机组传送文件(上传/下载)(已完成) 4,充分使用多线 ...
- SQLServer2005创建定时作业任务
SQLServer定时作业任务:即数据库自动按照定时执行的作业任务,具有周期性不需要人工干预的特点 创建步骤:(使用最高权限的账户登录--sa) 一.启动SQL Server代理(SQL Server ...
- 使用T-SQL找出执行时间过长的作业
有些时候,有些作业遇到问题执行时间过长,因此我写了一个脚本可以根据历史记录,找出执行时间过长的作业,在监控中就可以及时发现这些作业并尽早解决,代码如下: SELECT sj.name , ...
随机推荐
- 品Spring:负责bean定义注册的两个“排头兵”
别看Spring现在玩的这么花,其实它的“筹码”就两个,“容器”和“bean定义”. 只有先把bean定义注册到容器里,后续的一切可能才有可能成为可能. 所以在进阶的路上如果要想走的顺畅些,彻底搞清楚 ...
- Java入门系列之hashCode和equals(十二)
前言 前面两节内容我们详细讲解了Hashtable算法和源码分析,针对散列函数始终逃脱不掉hashCode的计算,本节我们将详细分析hashCode和equals,同时您将会看到本节内容是从<E ...
- .NET Core应用的三种部署方式
.NET Core应用提供了三种部署方式: FDD FDD:Framework-dependent deployment,框架依赖部署.这种方式针对某个特定版本的.NET Core进行发布,只打包应用 ...
- (java实现)单向循环链表
什么是单向循环链表 单向循环链表基本与单向链表相同,唯一的区别就是单向循环链表的尾节点指向的不是null,而是头节点(注意:不是头指针). 因此,单向循环链表的任何节点的下一部分都不存在NULL值. ...
- ubuntu13启动屏幕亮度0解决方法
在终端输入: sudo gedit /etc/default/grub 找到 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" GRUB_CMDL ...
- eclipse与hadoop集成,运行wordCount1
搭好了hadoop集群之后,就该使用它了 第一步:下载hadoop eclipse的插件,将它放到eclipse\plugins的目录下,然后重启eclipse,点击windows->show ...
- SpringBootSecurity学习(14)前后端分离版之 OAuth2.0介绍
登录总结 前面基本介绍了security的常规用法,同时介绍了JWT和它的一个简单实现,基本上开发中遇到的登录问题都能解决了,即使在分布式开发,或者微服务开发中实现登录也基本没有问题了.securit ...
- 快学Scala 第二十课 (trait的构造顺序)
trait的构造顺序: 首先调用超类构造器 特质构造器在超类构造器之后,类构造器之前执行 特质从左向右被构造 每个特质当中,父特质先被构造 如果多个特质共有一个父特质,而那个父特质已经被构造,则不会被 ...
- Flutter学习笔记(29)--Flutter如何与native进行通信
如需转载,请注明出处:Flutter学习笔记(29)--Flutter如何与native进行通信 前言:在我们开发Flutter项目的时候,难免会遇到需要调用native api或者是其他的情况,这时 ...
- JavaScript中闭包的使用和各种继承介绍
一.什么是闭包? (1)闭包的概念:a.闭包就是函数嵌套时,让局部变量变成自由变量的环境,是一种让局部变量进化的方式. b.定义在一个函数内部的函数. ...