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. chrome控制台使用jquery

    html页面中加入:<script type="text/javascript" src="http://static.fanxian.com/script/jqu ...

  2. 微信小程序——单选项

    对于小程序单选,官方文档已经贴出了代码,我这里也不做过多解释,只是分享给大家一个小功能 一般在单选或者多选时,都会出现“其他”这个选项,如果通过input焦点事件.失焦事件来控制,代码会很繁琐 这里可 ...

  3. 牛客多校第五场 B generator 1 矩阵快速幂

    题意: 给定$x_0,x_1,a,b,n,mod, x_i=a*x_{i-1}+b*x_{i-2}$ ,求$x_n % mod$ n最大有1e6位 题解: 矩阵快速幂. 巨大的n并不是障碍,写一个十进 ...

  4. VS2010-MFC(常用控件:组合框控件Combo Box)

    转自:http://www.jizhuomi.com/software/189.html 上一节讲了列表框控件ListBox的使用,本节主要讲解组合框控件Combo Box.组合框同样相当常见,例如, ...

  5. java.sql.SQLSyntaxErrorException: ORA-00932: 数据类型不一致: 应为 NUMBER, 但却获得 BINARY

    2019-07-24 17:24:35 下午 [Thread: http-8080-4][ Class:net.sf.ehcache.store.disk.Segment Method: net.sf ...

  6. sql还原数据库时候改变数据库名

    需求:在做图书馆数据整合时候,由于有两个校区,用的是分离开的同一个数据库,数据库名字都一样的,现在我要整合在一起,我的想法是把两个数据库先还原到我本地,用写好的脚本整合到一起.所以,我还原两个数据库时 ...

  7. Django之跨表查询——正反向查询(ManyToManyField)

    1.多对多查询:涉及到两张表以上的查询. author_obj = models.Author.objects.first() print(author_obj.name) # 查询金老板写过的书 r ...

  8. <Python基础>字符串的基本操作

    s = 'abCDeFg aBcDea' print(s.find('b')) #通过元素查找索引,找不到返回-1 print(s.index('b')) #通过元素查找索引,找不到报错(会报错,基本 ...

  9. ON_WM_TIMER() void (__cdecl xx::* )(UINT)”转换为“void (__cdecl CWnd::* )(UINT_PTR)

     ON_WM_TIMER()在编译器从32位转换为64位的时候, 出现的问题; class CFlatComboBox : public CComboBox   (基类为CWnd) 为了重载CWnd的 ...

  10. iOS开发系列-GCD

    概述 GCD是苹果公司为多核的并行运算提出的解决方案.全称是Grand Central Dospatch.纯C语言,提供了非常多强大的函数. GCD自动管理线程的声明周期(创建线程.调度任务.销毁线程 ...