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 , ...
随机推荐
- csps模拟93序列,二叉搜索树,走路题解
题面: 模拟93考得并不理想,二维偏序没看出来,然而看出来了也不会打 序列: 对a,b数列求前缀和,那么题意转化为了满足$suma[i]>=suma[j]$且$sumb[i]>=sumb[ ...
- 最大流拆点——hdu2732,poj3436
一种很普遍的做法就是把一个带有容量的点拆成两个点,一个入点一个出点,链接两个点的边的权值为这个点的容量 hdu3732 #include<cstdio> #include<cstri ...
- iOS UIWebView获取403/404
问题描述 与WindowsPhone不同,iOS UIWebView并不认为403/404这种情况下页面访问是失败的,这也情有可原,但有时候,我们需要对WebView所遇到的403/404进行处理. ...
- VC6 Release下,生成pdb文件
1.Generate debug必须选上,否则没有调试信息 2.把优化disable,否则容易产生代码地址偏移: 3.用program database产生PDB文件: 4.将dll, exe, pd ...
- day23_4_hashlib
#!/usr/bin/env python # -*- coding:utf-8 -*- # ----------------------------------------------------- ...
- deployment资源
目的:用rc在滚动升级之后,会造成服务访问中孤单,于是k8s引入了deploymentziyuan 创建deployment vim k8s_deploy.yml apiVersion: extens ...
- 【转载】flex布局超过显示省略号
<div class="main"> <div class="content"> <h4 class="name&quo ...
- Pycharm2019.1.3安装程序以及教程
链接:https://pan.baidu.com/s/1TF--EyCUQgmPeXFaCMJm8w 提取码:5vme
- <Django>第一篇:入门的例子
1.MVT框架 Model(模型):数据库交互相关.在这部分一般需要进行三个操作: (1)面向数据库:模型对象.列表 (2)定义模型类:指定属性及类型,确定表结构(设计表),需要迁移(生成表) (3) ...
- <Python基础>python是如何进行内存管理的
.Python 是如何进行内存管理的?答:从三个方面来说,一对象的引用计数机制,二垃圾回收机制,三内存池机制⒈对象的引用计数机制Python 内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用 ...