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方法用来从文件中反序列化出对象
'''
setting.py 文件内容如下:
# [MySQL]
HOST = "192.168.32.128"
PORT = "3306"
DB_PATH = r"C:\Users\Administrator\Desktop\老男孩python文档\老男孩Python程序编写\正式班\day 21\课堂练习\db"
'''
import uuid
import pickle
import setting
import os
# print(uuid.uuid1())
# 1、定义MySQL类
class MySQL():
def __init__(self,host,port):
self.host = host
self.port = port
self.id = self.create_id
# 定义工具create_id,在实例化时为每个对象随机生成id,保证id唯一
@property
def create_id(self):
return str(uuid.uuid1())
'''
4.为对象定制方法,save和get_obj_by_id,save能自动将对象序列化到文件中,
文件路径为配置文件中DB_PATH,文件名为id号,
保存之前验证对象是否已经存在,若
存在则抛出异常,;get_obj_by_id方法用来从文件中反序列化出对象
'''
# 使用property装饰器变成一个属性 让其它方法引用
@property
def is_exists(self):
tag = True
files = os.listdir(setting.DB_PATH)
for f in files:
file_path = os.path.join(f"{setting.DB_PATH}", f"{f}")
with open(file_path,"rb") as f:
# 将对象从文件里读出来,与传入的对象比较,如果存在那么就报错,对象已存在
obj = pickle.load(f)
if self.host == obj.host and self.port == obj.port:
tag = False
break
return tag
# 保存对象
def save(self):
file_path = os.path.join(f"{setting.DB_PATH}",f"{self.id}.txt")
# file_path = f"{setting.DB_PATH} + {os.sep} + {self.id}.txt"
if not self.is_exists:
raise PermissionError("对象已存在")
with open(file_path,"wb") as f:
pickle.dump(self,f)
# get_obj_by_id 方法用来从文件中反序列化出对象
# 被 @staticmethod 装饰器装饰的方法就是非绑定方法,就是一个普通的函数,可以直接使用类名.方法调用
@staticmethod
def get_obj_by_id(id):
file_path = os.path.join(f"{setting.DB_PATH}",f"{id}.txt")
with open(file_path,"rb") as f:
data = pickle.load(f)
return data
@property
def from_conf(self):
return setting.HOST,setting.PORT
# 实例化:传入ip、port
mysql1 = MySQL("192.168.32.128","3306")
id = mysql1.create_id
print(id)
mysql1.save()
print(MySQL.get_obj_by_id("faac1062-ebfd-11e9-8c9a-5c969d851d2a").host)
# 可从类中方法获取 ip、port
print(mysql1.from_conf)
终端打印结果
e6726927-ebff-11e9-8bbc-5c969d851d2a # 打印id
Traceback (most recent call last):
File "C:/Users/Administrator/Desktop/老男孩python文档/老男孩Python程序编写/正式班/day 21/课堂练习/day21作业.py", line 93, in <module>
mysql1.save()
File "C:/Users/Administrator/Desktop/老男孩python文档/老男孩Python程序编写/正式班/day 21/课堂练习/day21作业.py", line 69, in save
raise PermissionError("对象已存在")
PermissionError: 对象已存在 # 对象已经保存至文件 主动抛错
192.168.32.128 # get_obj_by_id 方法反序列化得到对象的host
('192.168.32.128', '3306')
2、定义一个类:圆形,该类有半径,周长,面积等属性,将半径隐藏起来,将周长与面积开放
'''
2、定义一个类:圆形,该类有半径,周长,面积等属性,将半径隐藏起来,将周长与面积开放
'''
import math
class Circle:
def __init__(self): # 传入○的半径
self.__banjing = 1 # 隐藏半径属性
# 使用property装饰器当做属性引用
@property
def area(self): # 计算面积
return math.pi * self.__banjing**2
@property
def zhouchang(self):
return 2*math.pi*self.__banjing
c = Circle()
print(c.area) # 求该圆的面积
print(c.zhouchang) # 求该圆的周长
终端打印结果
3.141592653589793
6.283185307179586
3、使用abc模块定义一个phone抽象类 并编写一个具体的实现类
'''
使用abc模块定义一个phone抽象类 并编写一个具体的实现类
'''
import abc
class iPhone(metaclass=abc.ABCMeta):
@abc.abstractmethod
def play(self):
pass
@abc.abstractmethod
def take_phone(self):
pass
class hongmi(iPhone):
# 子类继承父类的属性,必须遵循父类的规范
def play(self):
pass
def take_phone(self):
pass
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 , ...
随机推荐
- JavaScript - 常用对象相关
1. String对象 length : 字符串的长度 charAt(index) : 返回指定位置的字符串, 下标从0开始 indexOf(str) : 返回指定的字符串在当前字符串中首次出现的位置 ...
- Pipe进程之间的通信
#_author:来童星#date:2019/12/11#Pipefrom multiprocessing import Process, Pipedef f(conn): conn.send([42 ...
- 2019亚太内容分发大会,阿里云获CDN领袖奖、技术突破奖
近日,亚太CDN产业联盟主办的2019亚太内容分发大会在上海召开.本次大会以"5G分发"为主题,集结了CDN领域近千名行业领袖.专家参与.在会上,阿里云斩获“CDN领袖奖”.“技术 ...
- SPSS分类分析:决策树
SPSS分类分析:决策树 一.决策树(分析-分类-决策树) "决策树"过程创建基于树的分类模型.它将个案分为若干组,或根据自变量(预测变量)的值预测因变量(目标变量)的值.此过程为 ...
- Mac 解决硬盘插入不能写的问题
软件解决 链接:https://pan.baidu.com/s/1H_zvPPpW0dp7aRUvjDnkQA 密码:8fit 有个NTFS的移动硬盘,默认Mac系统是不能写入,只能读取的,我们可以 ...
- [CF587-F]WI-FI
显然DP题... f[i][0]表示这个点不装路由器,f[i][1]表示装路由器 转移也很简单,在前面一段区间找最小值就好了 但是直接转移是$O(n*k)$的,会T掉 大佬说这个东西有单调性,但是菜鸡 ...
- <a>中的背景色变大
想要调整文字链接背景颜色或图片的大小可以用padding属性: 但火狐和IE数值相同显示相同,但与360数值相同显示不同(上下宽度会变小.)
- Java中Arrys数组常用的方法
Arrys常用方法 1.toString() Arrays.toString(arr) //打印数组的内容,观察数组元素的值 2.sort() Arrays.sort(arr); ...
- 中国剩余定理模数不互质的情况(poj 2891
中国剩余定理模数不互质的情况主要有一个ax+by==k*gcd(a,b),注意一下倍数情况和最小 https://vjudge.net/problem/POJ-2891 #include <io ...
- 回首2018 | 分析型数据库AnalyticDB: 不忘初心 砥砺前行
题记 分析型数据库AnalyticDB(下文简称ADB),是阿里巴巴自主研发.唯一经过超大规模以及核心业务验证的PB级实时数据仓库.截止目前,现有外部支撑客户既包括传统的大中型企业和政府机构,也包括众 ...