今日作业
'''
0、课堂代码理解,并敲两遍以上 (技术的牛逼是靠量的积累)
1、定义MySQL类(参考答案:http://www.cnblogs.com/linhaifeng/articles/7341177.html#_label5)
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方法用来从文件中反序列化出对象
2、定义一个类:圆形,该类有半径,周长,面积等属性,将半径隐藏起来,将周长与面积开放
参考答案(http://www.cnblogs.com/linhaifeng/articles/7340801.html#_label4)
3、使用abc模块定义一个phone抽象类 并编写一个具体的实现类
4、着手编写选课系统作业:http://www.cnblogs.com/linhaifeng/articles/6182264.html#_label15
'''
'''
定义一个类:圆形,该类有半径,周长,面积等属性,将半径隐藏起来,将周长与面积开放
参考答案(http://www.cnblogs.com/linhaifeng/articles/7340801.html#_label4)
'''
from math import pi
class Circle:
def __init__(self,radius):
self.__radius = radius
def perimeter(self):
return (2*pi*self.__radius)
def area(self):
return (pi*(self.__radius**2))
c = Circle(5)
print(c.area())
print(c.perimeter())
'''
使用abc模块定义一个phone抽象类 并编写一个具体的实现类
'''
import abc
class Phone:
def __init__(self,price,screen):
self.price = price
self.screen = screen
class Mi(Phone):
def __init__(self,price,screen):
super().__init__(price,screen)
self.brand = 'Mi'
def show(self):
print(f'{self.brand},{self.price},{self.screen}')
class Iphone(Phone):
def __init__(self,price,screen):
super().__init__(price, screen)
self.brand = 'IPHONE'
def show(self):
print(f'{self.brand},{self.price},{self.screen}')
mi5 = Mi(2000,15)
ip7 = Iphone(4000,4)
mi5.show()
ip7.show()
HOST = '127.0.0.1'
PORT = 3306
DB_PATH = 'ss'
import uuid
import pickle
import os
class MySQL:
def __init__(self,host,port):
self.host = host
self.port = port
self.id = self.create_id()
def save(self):
if not self.is_exists:
raise PermissionError('id has existed')
file_path = f'{DB_PATH},{os.sep}{self.id}'
pickle.dump(self,open(file_path,'wb'))
@property
def is_exists(self):
tag = True
files = os.listdir(DB_PATH)
for file in files:
file_abspath = f'{DB_PATH}{os.sep}{file}'
obj = pickle.load(open(file_abspath,'rb'))
if self.host == obj.host and self.port == obj.port:
tag = False
break
return tag
@staticmethod
def get_obj_by_id(id):
file_abspath = f'{DB_PATH}{os.sep}{id}'
return pickle.load(open(file_abspath,'rb'))
@staticmethod
def create_id():
return str(uuid.uuid1())
@classmethod
def from_conf(cls):
print(cls)
return cls(HOST,PORT)
conn = MySQL.from_conf()
conn.save()
conn1 = MySQL('127.0.0.1',3306)
conn1.save()
obj = MySQL.get_obj_by_id()
print(obj.host)