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方法用来从文件中反序列化出对象

# settings.py
import os IP='127.0.0.1'
PORT='3306'
DB_PATH = os.path.join(os.path.dirname(__file__),'db')
if not os.path.exists(DB_PATH):
os.mkdir(DB_PATH) # MYSQL1.py
import settings
import uuid
import os
import pickle
class MYSQL:
def __init__(self,host,port):
self.id = self.create_id()
self.port = port
self.host = host
@staticmethod
def create_id():
return uuid.uuid4() @classmethod
def conf_flie(cls):
return cls(settings.IP,settings.PORT) def save(self):
if not self.select_file:
raise PermissionError('对象已存在!')
file_path=os.path.join(settings.DB_PATH,str(self.id))
with open(file_path,'wb') as f:
pickle.dump(self,f) @property
def select_file(self):
tag=True
files = os.listdir(settings.DB_PATH)
for file in files:
file_path=os.path.join(settings.DB_PATH,file)
with open(file_path,'rb') as f:
obj=pickle.load(f)
if obj.host == self.host and obj.port == self.port:
tag = False
break
return tag @staticmethod
def get_obj_by_id(id):
file_path=os.path.join(settings.DB_PATH,id)
if not os.path.exists(file_path):
print('该路径不存在!')
return
with open(file_path,'rb') as f:
return pickle.load(f) # obj=MYSQL.conf_flie()
# obj.save()
# obj1=MYSQL('127.0.0.1','3306')
# obj1.save() # print(obj)
# print(obj.port)
# print(obj.create_id()) obj2=MYSQL.get_obj_by_id('3ca4b877-e5af-4451-9554-90bf307f2f6c')
print(obj2)
print(f'''
IP:{obj2.host}
PORT:{obj2.port}
''')

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

import cmath
class Circle: def __init__(self,radius):
self.__radius=radius @property
def parameter(self):
return cmath.pi*self.__radius*2 @property
def area(self):
return cmath.pi*(self.__radius)**2 int_radius=int(input('请输入半径:').strip())
c=Circle(int_radius)
print(c.parameter)
print(c.area)
print(c.radius)

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


import abc class Phone(metaclass=abc.ABCMeta): # 供电
@abc.abstractmethod
def supply_power(self):
pass # 检测程序
@abc.abstractmethod
def test_program(self):
pass # 输出复位信号
@abc.abstractmethod
def output_REF_ON(self):
pass # 调用开机程序
@abc.abstractmethod
def transfer_start_program(self):
pass # 建立通信链接
@abc.abstractmethod
def establish_communication_link(self):
pass class Xiaomi_mate3(Phone): # 供电
def supply_power(self):
print('手机供电中。。。') # 检测程序
def test_program(self):
print('正在检测开机程序。。。') # 输出复位信号
def output_REF_ON(self):
print('输出各路复位信号。。。。') # 调用开机程序
def transfer_start_program(self):
print('调用开机程序。。。。') # 建立通信链接
def establish_communication_link(self):
print('通信链接中。。。') # 派生
def load_xiaomi_desk(self):
pass xiaomi = Xiaomi_mate3()
xiaomi.transfer_start_program()

绑定与非绑定以及property装饰器_day_21 作业题的更多相关文章

  1. 绑定方法和隐藏属性之property装饰器

    目录 一:绑定方法 1.绑定给对象的方法 2.绑定给类的方法 3.非绑定方法之静态方法 二,隐藏属性 1.如何隐藏属性 三,property 装饰器 一:绑定方法 1.绑定给对象的方法 class P ...

  2. 封装、property特性及绑定与非绑定方法

    1.封装 (1)什么是封装? 封:属性对外是隐藏的,但对内是开放的: 装:申请一个名称空间,往里面装入一系列名字/属性 (2)为什么要封装? 封装数据属性的目的 首先定义属性的目的就是为了给类外部的使 ...

  3. python 面向对象(类的成员,属性,绑定和非绑定,)

    面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对象),实 ...

  4. Day08:继承与派生,多态,封装,绑定与非绑定方法,面向对象高级(反射,__str__,__del__)

    上节课复习:1.编程思想    面向过程        核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么后干什么        基于该思想编写程序就好比在设计一条流水线,是一种机械式的思维 ...

  5. python中@property装饰器的使用

    目录 python中@property装饰器的使用 1.引出问题 2.初步改善 3.使用@property 4.解析@property 5.总结 python中@property装饰器的使用 1.引出 ...

  6. python面向编程;类的绑定与非绑定方法、反射、内置方法

    一.类的绑定与非绑定方法 ''' 类中定义函数分为了两大类: 1. 绑定方法 特殊之处: 绑定给谁就应该由谁来调用,谁来调用就会将谁当做第一个参数自动传入 绑定给对象的方法: 在类中定义函数没有被任何 ...

  7. CSIC_716_20191128【多态、绑定与非绑定方法、isinstance与issubclass 】

    多态 what: 同一个事物有不同的形态. 多态的目的:在不知道对象具体类型的情况下,统一对象调用方法的规范.(通俗讲,即规定实现同样功能的方法,一定要起同样的名字). 多态的表现形式之一就是继承,先 ...

  8. Python使用property函数和使用@property装饰器定义属性访问方法的异同点分析

    Python使用property函数和使用@property装饰器都能定义属性的get.set及delete的访问方法,他们的相同点主要如下三点: 1.定义这些方法后,代码中对相关属性的访问实际上都会 ...

  9. 第8.27节 Python中__getattribute__与property的fget、@property装饰器getter关系深入解析

    一. 引言 在<第7.23节 Python使用property函数定义属性简化属性访问的代码实现>和<第7.26节 Python中的@property装饰器定义属性访问方法gette ...

随机推荐

  1. Ubuntu18.04两步纯小白傻瓜无脑式安装Caffe

    前言 Ubuntu16安装caffe过于繁琐,然而Ubuntu18安装起来却仅仅两步而已 附上官方安装教程:http://caffe.berkeleyvision.org/install_apt.ht ...

  2. 激活后出现grab>

    最近由于经常整理自己电脑上的文件,难免都会遇到误删系统文件或者操作失误导致系统不能够正常进入的情况.这时就会出现grub错误的提示,只能输入命令才能进入系统.那么该输入什么命令呢?其实非常简单. gr ...

  3. Angular项目里Js代码里如何获取Ts文件中的属性数据

    基于之前实现的Angular+ngx-ueditor富文本编辑器做一个简单补充记录,我们在使用Angular开发过程中,难免会使用到调用外部插件Js的应用,但是有的时候又需要在Js文件中调用Ts文件里 ...

  4. linux上传文件的命令——rz

    下面来看一下有关上传下载的说明. 1.rz.sz命令的安装方法 第一种方法:安装系统时选包包含rz.sz命令的包组 第二种方法:安装系统后通过执行yum install lrzsz -y 或 yum ...

  5. 菜鸟系列Fabric——Fabric 1.2 单机部署(2)

    Fabric 1.2单机部署 https://hyperledger-fabric.readthedocs.io/en/release-1.2/whatis.html 创建目录 sudo mkdir ...

  6. [转帖]浪潮信息最大供应商英特尔(Intel):2018 年采购额 145.76 亿元

    浪潮信息最大供应商英特尔(Intel):2018 年采购额 145.76 亿元 https://t.cj.sina.com.cn/articles/view/3172142827/bd130eeb01 ...

  7. Luogu P5354 [Ynoi2017]由乃的OJ

    题目 这题以前叫睡觉困难综合征. 首先我们需要知道起床困难综合征怎么做. 大概就是先用一个全\(0\)和全\(1\)的变量跑一遍处理出每一位\(1\)和\(0\)最后会变成什么. 然后高位贪心:如果当 ...

  8. vs2019编译opencv

    序 微软家的宇宙第一ide:visual studio已经更新到了2019版,芒果也更新尝鲜了一遍,体验还不错,建议更新尝尝鲜.芒果顺便使用vs2019编译了一遍opencv,编译过程也非常顺利,以下 ...

  9. CSS3彩色进度条加载动画 带进度百分比

    在线演示       本地下载

  10. Navicat连接Mysql11.1.13出现1251错误

    打开Navicat软件,单击左上角[连接]按钮,选择mysql,弹出新建连接,输入相关信息,单击[连接测试],报1251的错误,如下图所示: 根因分析: mysql8 之前的版本中加密规则是mysql ...