课后练习 第一阶段:Python开发基础 day25 面向对象相关练习
day 25 作业
目录
1.组合,多态和多态性,封装 整理出来
第一阶段:Python开发基础 day25 面向对对象三大特性之多态和封装、组合
2.统计对象name属性被查看了多少次
代码如下:
class Person: # 定义一个类
def __init__(self,name):
self.__name = name # 设置一个name 属性用于接收传递过来的name值
self.count = 0 # 定义一个count属性用于计数
def get_name(self):
self.count += 1 # get_name方法被执行一次计数加一
print(self.__name) # 打印name属性
return f'name属性被查看了{self.count}次'
test = Person('foever') # 实例化一个对象
for i in range(10): # 设置一个循环
print(test.get_name()) # 打印效果
3.统计一下类被实例化了多少次
class Person: # 定义一个类
count = 0 # 定义一个count属性用于计数
def __init__(self,name):
self.__name = name # 设置一个name 属性用于接收传递过来的name值
Person.count += 1 # 被实例化一次就会计数一次
for i in range(10): # 设置一个循环
str = Person('forever') # 实例化类
print(Person.count) # 打印实例化次数
4.通过property写一个计算圆形面积的类中有个area
import cmath # 导入cmath 包 这样就可以使用pi
class Circle: # 定义一个圆类
def __init__(self,r):
self.r = r # 定义一个半径属性
@property
def get_area(self): # 定义一个获得圆面积的方法
return cmath.pi * self.r * self.r # 返回圆的面积
r = int(input('请输入圆的半径:')) # 接收用户输入进来圆的半径
circle = Circle(r) # 实例化一个圆的对象
area = circle.get_area # 获取计算后的圆的面积
print(f'圆的面积是:{area:.2f}') # 打印圆面积
5.选课系统的管理员注册,登录功能写完
文件目录结构:
settings.py
import os
FILE_PATH = os.path.dirname(os.path.dirname(__file__))
DB_PATH = os.path.join(FILE_PATH,'db')
admin.py
from interface import admin_interface
def register():
print('欢迎来到管理员注册页面')
username = input('请输入你的用户名:').strip()
password = input('请输入你要注册账号的密码:').strip()
msg = admin_interface.reg_interface(username,password)
print(msg)
def login():
print('欢迎来到管理员登陆页面')
username = input('请输入你的用户名:').strip()
password = input('请输入你的密码:').strip()
flag,msg = admin_interface.login_interface(username,password)
if flag:
print(msg)
else:
print(msg)
def create_school():
print('欢迎来到创建校区页面')
def create_teacher():
print('欢迎来到创建讲师页面')
def create_course():
print('欢迎来到创建课程页面')
func_dic = {
'1':register ,
'2':login ,
'3':create_school,
'4':create_teacher,
'5':create_course,
}
msg = '''
1. 管理员注册
2. 管理员登录
3. 创建学校
4. 创建老师
5. 创建课程
q. 退出
'''
def run():
while True:
print(msg)
choice = input('请做出你的选择:')
if choice == 'q':
print('已为你退出管理员界面')
break
if choice in '1,2,3,4,5':
func_dic[choice]()
else:
print('你的选择有误,请重新选择')
src.py
from core import admin_view
def admin():
print('欢迎来到管理员视图界面')
admin_view.run()
def teacher():
print('欢迎来到教师视图界面')
def student():
print('欢迎来到学生视图界面')
func_dic = {
'1':admin ,
'2':teacher ,
'3':student,
'q':exit
}
msg = '''
1.管理员界面
2.教师界面
3.学生界面
q.退出
'''
while True:
print(msg)
choice = input('请选择你的操作:')
if choice in '1,2,3,q':
func_dic[choice]()
else:
print('你的输入有误,请重新输入')
db_handler.py
from conf import settings
import os
import pickle
def save_info(object): # 定义一个保存信息的类
file_dir = os.path.join(settings.DB_PATH, object.__class__.__name__.lower()) # 找到注册的那个类
username = object.username # 传递过来的管理员的用户名
file_path = os.path.join(file_dir,f'{username}')
# print(admin_file_path)
with open(file_path,'wb') as fw:
pickle.dump(object,fw)
def read_info(username,file_dir):
file_path = os.path.join(settings.DB_PATH,file_dir,username)
if not os.path.exists(file_path):
return False
with open(file_path, 'rb') as fr:
data = pickle.load(fr)
return data
model.py
from db import db_handler
class Admin:
def __init__(self, username, password):
self.username = username
self.password = password
self.save()
def save(self):
db_handler.save_info(self)
admin_interface.py
from db import model,db_handler
def reg_interface(username,password):
model.Admin(username,password)
return '恭喜你注册成功'
def login_interface(username,password,file_dir = 'admin'):
data = db_handler.read_info(username,file_dir)
if not data :
return False,'用户名不存在'
if password == data.password :
return True,'登陆成功'
else:
return False,'密码错误'