一:定义一个People类,每个人的对象都有年龄\年龄\性别三个属性
分别完成对这个三个属性的:隐藏\开放接口\property伪装操作
ps:在开放的接口里严格控制赋值操作的数据类型问题
class People:
def __init__(self, name, age, gender):
self.__name = name
self.__age = age
self.__gender = gender
# name 隐藏
# age 开放接口
def get_age(self):
return "该用户的年龄为{}".format(self.__age)
def set_age(self):
new_age = input("请输入你要新赋予的年龄:").strip()
if isinstance(int(new_age), int):
self.__age = new_age
return "该用户的新年龄为{}".format(new_age)
else:
return "输入的信息有误!"
def del_age(self):
input("您将删除掉该用户的年龄,任意键继续:").strip()
del self.__age
return "删除成功"
# property 伪装操作
@property
def gender(self):
return "该用户的性别为{}".format(self.__gender)
@gender.setter
def gender(self, new_gender):
if new_gender in "男女":
self.__gender = new_gender
print("该用户的新年龄为{}".format(new_gender))
else:
print("输入的信息有误!")
@gender.deleter
def gender(self):
input("您将删除掉该用户的年龄,任意键继续:").strip()
del self.__gender
print("删除成功")
二:定义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 random
import settings
import os
import json
class MySQL:
def __init__(self, host, port):
self.user_id = self.create_id()
self.host, self.port = host, port
@staticmethod
def create_id():
user_id = ""
for i in range(10):
digital = random.choice(range(0, 10))
alphabet = chr(random.choice(range(65, 90)))
user_id += random.choice([str(digital), alphabet])
return user_id
@classmethod
def setting_hp(cls):
host = settings.HOST
port = settings.POSR
return cls(host, port)
def save_data(self):
user_data = {
"ID": self.user_id,
"PORT": self.port,
"HOST": self.host
}
if os.path.exists("{}.json".format(self.user_id)):
print("该用户已存在")
else:
with open("{}.json".format(self.user_id), "w", encoding="utf8")as f:
json.dump(user_data, f)
GGG = MySQL.setting_hp()
GGG.save_data()