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方法用来从文件中反序列化出对象
# 功能主题代码
import settings
import uuid
import pickle
import os
class MySQL:
def __init__(self, host, port):
self.host = host
self.port = port
self.id = self.create_id
@property
def create_id(self):
return str(uuid.uuid1())
@property
def is_exists(self):
tag = True
files = os.listdir(settings.DB_PATH)
for file in files:
file_path = os.path.join(settings.DB_PATH, file)
# print(file_path)
with open(file_path, 'rb') as fr:
obj = pickle.load(fr)
if self.host == obj.host and self.port == obj.port:
tag = False
break
return tag
def save(self):
if self.is_exists:
path = os.path.join(settings.DB_PATH, str(self.id))
with open(path, 'wb')as fw:
pickle.dump(self, fw)
print('保存成功!')
else:
print('对象已存在')
def get_obj_by_id(id):
path = os.path.join(settings.DB_PATH, id)
if os.path.exists(path):
with open(path, 'rb')as fr:
obj = pickle.load(fr)
return obj
else:
print('文件不存在')
@property
def from_conf(self):
return settings.HOSTS, settings.PORT
mysql1 = MySQL("127.0.0.1","3306")
id = mysql1.create_id
print(id)
mysql1.save()
obj = MySQL.get_obj_by_id('eeebefac-ec27-11e9-840a-701ce72cb960')
print(obj)
2、定义一个类:圆形,该类有半径,周长,面积等属性,将半径隐藏起来,将周长与面积开放
import math
class Circle:
def __init__(self, radius):
self.__radius = radius
@property
def area(self):
return math.pi * self.__radius ** 2
@property
def perimeter(self):
return 2 * math.pi * self.__radius
c = Circle(10)
# print(c._Circle__radius)
print(c.area)
print(c.perimeter)
'''
314.1592653589793
62.83185307179586
'''
3、使用abc模块定义一个phone抽象类 并编写一个具体的实现类
import abc
class Phone(metaclass=abc.ABCMeta):
@abc.abstractmethod
def call(self):
print('打电话')
@abc.abstractmethod
def send_msg(self):
print('发消息')
@abc.abstractmethod
def play_games(self):
print('玩游戏')
class Smartisan_OS(Phone):
def call(self):
print('打电话')
def send_msg(self):
print('发信息')
def play_games(self):
print('玩游戏')
p1 = Smartisan_OS()
p1.call()