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 , ...
随机推荐
- nginx的配置:目的是使用nginx反向代理后,应用程序获取用户真实ip
一.了解nginx Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富,可作为HT ...
- http://wiki.ros.org/navigation/Tutorials/RobotSetup
http://wiki.ros.org/navigation/Tutorials/RobotSetup
- day24 面向对象设计part1
#!/usr/bin/env python # -*- coding:utf-8 -*- # ----------------------------------------------------- ...
- AI入门---从破解AI开始
我这里说的AI,并不是人工智能(Artificial Intelligence),只是Adobe illustrator.旁边有做设计的朋友,在他的指引下,对这个工具还颇感兴趣.就先下载个工具,闲暇时 ...
- FTP、FTPS、SFTP概览
1. 基本概念 FTP:File Transfer Protocol FTPS:FTP over SSL.构建在SSL/TLS(Secure Socket Layer/Transport Layer ...
- linq to sql any和all的区别
Any说明:用于判断集合中是否有元素满足某一条件:不延迟.(若条件为空,则集合只要不为空就返回True,否则为False).1.简单形式:仅返回没有订单的客户:var q =from c in db. ...
- ReadyAPI创建功能测试的多种方法
原文:ReadyAPI创建功能测试的多种方法 声明:如果你想转载,请标明本篇博客的链接,请多多尊重原创,谢谢! 本篇使用的 ReadyAPI版本是2.5.0 在ReadyAPI中有多种方法可以创建功能 ...
- 一次bug死磕经历之Hbase堆内存小导致regionserver频繁挂掉
环境如下: Centos6.5 Apache Hadoop2.7.1 Apache Hbase0.98.12 Apache Zookeeper3.4.6 JDK1.7 Ant1.9.5 Maven3. ...
- 使用 JDK11 遇到的问题
1.下载的 JDK 解压版中没有 jre 目录以及相应的包,需要通过命令自动生成 进入 JDK 的 bin 目录下,执行以下命令,然后会在 bin 目录下生成一个 jre 目录,需要将该 jre 目录 ...
- Linq学习笔记(第一部分)
本文分享自lliulun的30分钟linq教程,地址:http://www.cnblogs.com/liulun/archive/2013/02/26/2909985.html 一:与LINQ有关的语 ...