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 作业的更多相关文章

  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. Windows DHCP服务器

    DHCP服务器 编辑 动态主机配置协议是一个局域网的网络协议.指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码.首先, DHCP服务器必须是一台安装有 ...

  2. 阿里云在云栖大会发布SaaS加速器3.0版最新成果,让天下没有难做的SaaS

    2019年杭州·云栖大会顺利落幕,超过6万人次观展,200余位顶尖科学家分享了前沿技术.作为“阿里云不做SaaS”,坚持“被集成”战略的落地体现,阿里云SaaS加速器在云栖大会现场发布了SaaS加速器 ...

  3. 阿里云宣布进入 Serverless 容器时代,推出弹性容器实例服务 ECI

    摘要: 阿里云宣布弹性容器实例 ECI(Elastic Container Instance)正式商业化. 为了应对业务高峰,打算提前多久执行ECS扩展?买了ECS虚拟机,容器规格不能完美装箱怎么办? ...

  4. 剑指Offer-14:输入一个链表,输出该链表中倒数第k个结点。

    题目描述: 输入一个链表,输出该链表中倒数第k个结点.例如有一个链表有六个节点1,2,3,4,5,6.则它的倒数第二个节点为5 节点定义如下: public class ListNode { int ...

  5. fiddler过滤其他网站请求

    1.首先选择filters过滤器,之后选择使用,点击第二个下拉框选择只显示下方主机地址 2.填写需要过滤的IP或网址,点击Actions保存设置 3.最后就可以只抓取固定的数据包了.

  6. SpringBoot--外部配置

    常见的SpringBoot外部配置有常规属性配置.类型安全的配置.日志配置.Profile配置 一.常规属性配置 在spring中,注入properties中的配置值时,需要两步: 通过注解@Prop ...

  7. Java程序员注意:Tomcat Get请求的巨坑!

    Tomcat8.5,当Get请求中包含了未经编码的中文字符时,会报以下错误,请求未到应用程序在Tomcat层就被拦截了. Tomcat报错: java.lang.IllegalArgumentExce ...

  8. 在core2.0中实现按程序集注入依赖

    前言:在Autofac的使用中,提供了个种注入的API其中GetAssemblies()用着特别的舒坦. 1.core2.0也可以使用Autofac的包,但框架自身也提供了默认的注入Api,IServ ...

  9. 【主席树】 [CQOI2015]任务查询系统

    模板题... 差分,然后用主席树维护时间点上的优先值和就好了 就是细节烦... #include<bits/stdc++.h> #define int long long #define ...

  10. Luogu P1131 [ZJOI2007]时态同步(dfs)

    P1131 [ZJOI2007]时态同步 题意 题目描述 小\(Q\)在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字\(1,2,3,\dots\).进行 ...