day 21 作业
定义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 作业的更多相关文章
- day 21作业
目录 一.定义一个类:圆形,该类有半径,周长,面积等属性,将半径隐藏起来,将周长与面积开放 二.使用abc模块定义一个phone抽象类 并编写一个具体的实现类 一.定义一个类:圆形,该类有半径,周长, ...
- 20155213 第十二周课堂作业MySort
20155213 第十二周课堂作业MySort 作业要求 模拟实现Linux下Sort -t : -k 2的功能 参考 Sort的实现 提交码云链接和代码运行截图 初始代码 1 import java ...
- 《UNIX环境高级编程(第3版)》
<UNIX环境高级编程(第3版)> 基本信息 原书名:Advanced Programming in the UNIX Environment (3rd Edition) (Addison ...
- 【资料总结】html开发小实例
目 录 第1章 1 HTML的基本标签 1 第2章 25 表格基础 25 第3章 53 表单和框架 53 第4章 77 CSS样式表 77 第5章 104 使用Dreamweaver制作网页 104 ...
- MySQL数据库基本操作(二)
表结构操作 ( ALTER TABLE) 添加单列: ALTER TABLE tb1_name ADD [COLUNM] col_name column_definition [FIRST|AFTER ...
- SAP-财务知识点
[转自 http://blog.itpub.net/195776/viewspace-1023912/] SAP FI/CO Reading RepositorySAP财务成本知识库 目 录前言.一. ...
- 团队作业8——第二次项目冲刺(Beta阶段)--5.21 second day
团队作业8--第二次项目冲刺(Beta阶段)--5.21 second day Day two: 会议照片 项目进展 今天是beta冲刺的第二天,组长还在准备考试当中,我们继续做前端改进和后端安排,今 ...
- Java学习作业(14.4.21)
前三次作业都是基础语法.真的好水啊.从这次开始记录. 1.编写Java程序,把当前目录下扩展名为txt的文件的扩展名全部更名为back. import java.io.*; import java.l ...
- 团队作业8——第二次项目冲刺(Beta阶段)Day4--5.21
展开圆桌式会议: 会议内容:1.团队成员对昨天任务完成情况做一个简单交流,并对昨天工作中存在的问题提出集中讨论解决:2.按照昨天的昨天工作分配表做具体的任务分配:3.简单讨论明天的任务分配每个人的工作 ...
随机推荐
- MQTT研究之EMQ:【EMQX使用中的一些问题记录(1)】
issue 1. EMQX的共享订阅 EMQX是一个非常强大的物联网通信消息总线,基于EMQX开展应用开发,要注意很多配置细节问题,这里要说到的就是共享订阅以及和cleanSession之间的关系问题 ...
- Sword 位运算取余操作
/* 位运算取余操作 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include ...
- Ubuntu下配置Window CIFS共享
转自:https://blog.csdn.net/wanfengzhong/article/details/52550074 1. 准备windows共享文件夹 2. 安装 cifs-utilssud ...
- 原生微信小程序脚手架(支持npm)
微信小程序支持npm 为了支持生态扩展,社区贡献者可以提供更加丰富的功能,已经支持了第三方小程序开发功能,见如下地址. 微信小程序支持npm https://developers.weixin.qq. ...
- shell中函数的使用
函数是一个脚本代码块,你可以对它进行自定义命名,并且可以在脚本中任意位置使用这个函数.如果想要这个函数,只要调用这个函数的名称就可以了.使用函数的好处在于模块化以及代码可读性强. (1).函数的创建语 ...
- "What's your problem?"记住!聊天千万不能用这句话!
"What's your problem?"记住!聊天千万不能用这句话! 2018-01-05 19:21 这个世界套路太多 学英语也不例外 一不留神就陷入套路里 有一种痛叫做“ ...
- Django的分页器 paginator
导入 from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger Page对象 Paginator.page()将返回 ...
- 【tensorflow-v2.0】如何查看模型的输入输出流的属性
操作过程: 1. 查看mobilenet的variables loaded = tf.saved_model.load('mobilenet') print('MobileNet has {} tra ...
- Centos7基础之查看NETMASK,GATWAY,DNS小技巧
引语: 查看IP这种很基础的操作,想必大家都快倒背如流了.就是不知道大家知不知道怎么查看NETMASK,GATWAY,DNS.当然nmtui图形化界面以及查看网络配置文件这种骚操作就直接略过了.之前一 ...
- [Linux]Ubuntu设置时区和更新时间
Ubuntu 下执行 date -R 查看现在时区 执行 tzselect查看时区,注意这个命令只能查询不能真正的修改时区 执行下面命令,复制文件到 /etc/可修改时区 sudo cp /usr/s ...