定义MySQL类

  • 对象有id、host、port三个属性
  • 定义工具create_id,在实例化时为每个对象随机生成id,保证id唯一
  • 提供两种实例化方式,方式一:用户传入host和port 方式二:从配置文件中读取host和port进行实例化
  • 为对象定制方法,save和get_obj_by_id,save能自动将对象序列化到文件中,文件路径为配置文件中 DB_PATH,文件名为id号,保存之前验证对象是否已经存在,若存在则抛出异常,get_obj_by_id方法用来从文件中反序列化出对象
Copyfrom conf import settings
import uuid
import pickle
import os class MySQL:
def __init__(self, host, port):
self.id = self.create_id()
self.host = host
self.port = port def save(self):
if self.is_exists:
raise PermissionError('对象已存在')
file_path = f'{settings.DB_PATH}{os.sep}{self.id}'
pickle.dump(self, open(file_path, 'wb')) @property
def is_exists(self):
tag = False
files = os.listdir(settings.DB_PATH) for file in files:
file_abspath = f'{settings.DB_PATH}{os.sep}{file}'
obj = pickle.load(open(file_abspath, 'rb'))
if self.host == obj.host and self.port == obj.port:
tag = True
break return tag @staticmethod
def get_obj_by_id(id):
file_path = f'{settings.DB_PATH}{os.sep}{id}'
return pickle.load(open(file_path, 'rb')) @staticmethod
def create_id():
return str(uuid.uuid1()) @classmethod
def from_conf(cls):
print(cls)
return cls(settings.HOST, settings.PORT) # conn = MySQL.from_conf()
# conn.save() obj = MySQL.get_obj_by_id('504ab0f6-ec21-11e9-b9e2-d053497faa26')
print(obj.host)

定义一个类:圆形,该类有半径,周长,面积等属性,将半径隐藏起来,将周长与面积开放

Copyfrom math import pi

class Round:
def __init__(self, radius):
self.__radius = radius def perimeter(self):
return round(2 * pi * self.__radius, 2) def area(self):
return round(pi * (self.__radius ** 2), 2) r = Round(1)
print(r.area())
print(r.perimeter())
print(r._Round__radius)

使用abc模块定义一个phone抽象类 并编写一个具体的实现类

Copyimport abc

# 抽象类/父类
class CellPhone(metaclass=abc.ABCMeta): @abc.abstractmethod
def calling(self):
pass @abc.abstractmethod
def send_msg(self):
pass # 现实类/子类
class SmartPhone(CellPhone): def calling(self):
print('calling...') # def send_msg(self):
# print('sending msg...') def app_download(self):
print('downloading app...') iphone = SmartPhone()
iphone.calling()
iphone.send_msg()
iphone.app_download()

day 21 作业的更多相关文章

  1. day 21作业

    目录 一.定义一个类:圆形,该类有半径,周长,面积等属性,将半径隐藏起来,将周长与面积开放 二.使用abc模块定义一个phone抽象类 并编写一个具体的实现类 一.定义一个类:圆形,该类有半径,周长, ...

  2. 20155213 第十二周课堂作业MySort

    20155213 第十二周课堂作业MySort 作业要求 模拟实现Linux下Sort -t : -k 2的功能 参考 Sort的实现 提交码云链接和代码运行截图 初始代码 1 import java ...

  3. 《UNIX环境高级编程(第3版)》

    <UNIX环境高级编程(第3版)> 基本信息 原书名:Advanced Programming in the UNIX Environment (3rd Edition) (Addison ...

  4. 【资料总结】html开发小实例

    目 录 第1章 1 HTML的基本标签 1 第2章 25 表格基础 25 第3章 53 表单和框架 53 第4章 77 CSS样式表 77 第5章 104 使用Dreamweaver制作网页 104 ...

  5. MySQL数据库基本操作(二)

    表结构操作 ( ALTER TABLE) 添加单列: ALTER TABLE tb1_name ADD [COLUNM] col_name column_definition [FIRST|AFTER ...

  6. SAP-财务知识点

    [转自 http://blog.itpub.net/195776/viewspace-1023912/] SAP FI/CO Reading RepositorySAP财务成本知识库 目 录前言.一. ...

  7. 团队作业8——第二次项目冲刺(Beta阶段)--5.21 second day

    团队作业8--第二次项目冲刺(Beta阶段)--5.21 second day Day two: 会议照片 项目进展 今天是beta冲刺的第二天,组长还在准备考试当中,我们继续做前端改进和后端安排,今 ...

  8. Java学习作业(14.4.21)

    前三次作业都是基础语法.真的好水啊.从这次开始记录. 1.编写Java程序,把当前目录下扩展名为txt的文件的扩展名全部更名为back. import java.io.*; import java.l ...

  9. 团队作业8——第二次项目冲刺(Beta阶段)Day4--5.21

    展开圆桌式会议: 会议内容:1.团队成员对昨天任务完成情况做一个简单交流,并对昨天工作中存在的问题提出集中讨论解决:2.按照昨天的昨天工作分配表做具体的任务分配:3.简单讨论明天的任务分配每个人的工作 ...

随机推荐

  1. 9个PNG透明图片免费下载网站推荐

    9个PNG透明图片免费下载网站推荐 酷站推荐 2017.08.06 13:47 png格式的图片因为去掉了的背景,方便使用在任何颜色的背景,所以对于从事设计师的朋友来说,经常会用到png透明图片.相信 ...

  2. Scheduling In Go

    https://www.ardanlabs.com/blog/2018/08/scheduling-in-go-part1.html https://blog.altoros.com/golang-i ...

  3. QC9.2登陆时显示一个X号

    这个是因为浏览器安全设置的问题,具体解决步骤如下: 进入“工具-Internet选项”设置窗口,进入“高级”选项卡,将“安全”设置中的“启用内存保护减少联机攻击”选项的勾选去掉,然后应用并确定.重启浏 ...

  4. Jenkins build 后 tomcat 启不来

    Jenkins build 后 war 包复制到 tomcat 下,启不来 添加 :export BUILD_ID=dontKillMe /usr/local/iron/tomcat8085/bin/ ...

  5. coding git push 403 时

    直接修改 项目目录下的 .git/config   url url = https://coding用户名:coding密码@git.coding.net/coding账号/coding项目名称.gi ...

  6. 批量删除sql语句

    SET @I = 148;SELECT CONCAT("DELETE FROM supplier_change_log WHERE old_supplier_id=4194 AND id&g ...

  7. phpspreadsheet 中文文档(三) 计算引擎

    2019年10月11日13:59:52 使用PhpSpreadsheet计算引擎 执行公式计算 由于PhpSpreadsheet表示内存中的电子表格,因此它还提供公式计算功能.单元格可以是值类型(包含 ...

  8. node excel export包导致find函数被覆盖

    这个包确实是巨坑:https://github.com/functionscope/Node-Excel-Export 本来是想用来导出Excel的,没想到把Array的find函数能乱了.这种基础函 ...

  9. 【转】什么是5G?居然有人用漫画把它讲得如此接地气!

    最近一系列层出不穷的新闻,似乎都离不开一个关键词——5G.在各大报道中,都提到5G网络是移动无线技术的下一个重要发展. 任正非之前也在采访中说过: “5G,别人两三年也不会追上我们的.” “5G并不是 ...

  10. git diff/difftool

    参考好文:使用命令和P4Merge进行diff::https://www.cnblogs.com/cgzl/p/8597066.html git difftool 即可弹出比较工具的界面 哈哈 === ...