内置属性
"""__author__ == Jefferson"""
'''
内置类属性: python中每个类都拥有内置的类属性
__name__
__doc__
__dict__
__module__
__bases__
'''
class Animal:
'''动物'''
pass
class Cat(Animal):
'''说明: 猫'''
number = 0
def __init__(self,name = '',color = ''):
self.name = name
self.color = color
def run(self):
print('%s在跑'%self.name)
@staticmethod
def shout():
print('喵~')
@classmethod
def get_number(cls):
print('猫的数量:%d'%cls.number)
if __name__ == '__main__':
cat = Cat('大白','白色')
'''
1. 类名.__name__
获取类的名字(字符串)
'''
print(Cat.__name__)
'''
2. 类名.__doc__
获取类的说明文档
'''
print(Cat.__doc__)
'''
3. 类名.__dict__: 获取所有的属性和对应的值, 以键值对的形式存到字典里
对象名.__dict__: 将对象的属性和对应的值, 转换成字典的元素(常用)
'''
print(Cat.__dict__)
print(cat.__dict__)
'''
4. 类名.__module__:获取当前类所在模块的名字
'''
print(Cat.__module__)
'''
5. 类名.__bases__: 查看当前类的父类
'''
print(Cat.__bases__)
Cat
说明: 猫
{'__module__': '__main__', '__doc__': '说明: 猫', 'number': 0, '__init__': <function Cat.__init__ at 0x000001D67FFA9510>, 'run': <function Cat.run at 0x000001D67FFA9598>, 'shout': <staticmethod object at 0x000001D67FFA64A8>, 'get_number': <classmethod object at 0x000001D67FFA64E0>}
{'name': '大白', 'color': '白色'}
__main__
(<class '__main__.Animal'>,)
私有化
"""__author__ == Jefferson"""
'''
python中类的属性和方法的私有化: 直接在属性名或者方法名前加'__'
属性或者方法私有: 在外部不能直接使用, 只能通过内部成员使用
'''
class Person:
'''人类'''
__number = 60
def __init__(self,name = '', age = '0'):
self.name = name
self.__age = age
def show_age(self):
self.__run()
return self.__age
#私有方法只能在类的内部调用
def __run(self):
print('run!')
if __name__ == '__main__':
p1 = Person('张三', '20')
p1.name = '李四'
print(p1.name,p1.show_age())
print(p1._Person__age)
run!
李四 20
20
getter和setter
"""__author__ == Jefferson"""
'''
属性假的私有化: 声明对象属性的时候, 在属性名前面加一个'_', 来告诉别人这个属性不可以直接使用,要通过getter和setter来获取和修改属性的值
1. getter: 获取属性的值
@property
def 属性名(self):
return self._name
如果在获取对象的某个属性前需要再干点别的事情, 就给属性添加getter
2. setter: 给属性赋值
一个属性必须要有getter然后才能添加setter
如果在获取对象的某个属性前需要再干点别的事情, 就给属性添加getter
@属性名(去掉下划线).setter
def 属性名去掉下划线(self, 变量名):
给下划线的属性赋值
如果
'''
class Student:
'''学生类'''
def __init__(self):
#声明属性的时候前面加一个'_'是为了告诉别人这个属性不能直接使用
self._name = ''
self._score = 0
self._age = 0
#给属性_name添加getter
@property
def name(self):
return self._name
#给属性_name添加setter
@name.setter
def name(self, value):
self._name = value
@property
def score(self):
return self._score
@score.setter
def score(self,value):
self._score = value
@property
def age(self):
return self._age
@age.setter
def age(self,value):
if value >= 150 or value < 0:
self._age = value
if __name__ == '__main__':
stu1 = Student()
#不添加getter和setter
stu1._name = '李四'
print(stu1._name)
#添加getter和setter
stu1.name = '张三'
print(stu1.name)
李四
张三
类的继承
"""__author__ == Jefferson"""
'''
子类: 继承者
父类(超类): 被继承者
1. 继承基础
python中类是可以继承的, 并且支持多继承
class 类名(父类)
说明: python中所有的类都默认继承python的基类: object
2. 能继承哪些内容
继承: 直接拥有父类的属性和方法
a. 对象的属性和方法, 类的字段和类方法, 静态方法都可以继承(私有的继承无意义--不能继承)
b. __solts__的值不会被继承
c. getter和setter会被继承
'''
class Person:
'''人'''
__slots__ = ('name','__age','_sex')
def __init__(self):
self.name = ''
self.__age = '0'
self._sex = '男'
def eat(self):
print("%s在吃饭"%self.name)
#类字段
number = 61
@classmethod
def get_number(cls):
print('Person类:%d'%cls.number)
@staticmethod
def hurt_earth():
print('Person类静态方法')
class Student(Person):
'''学生'''
pass
if __name__ == '__main__':
stu = Student()
stu.name = '小明'
print(stu.name,stu.number)
stu.eat()
stu.get_number()
stu.hurt_earth()
print(stu.__dict__)
stu.id = 123
print(stu.id)
小明 61
小明在吃饭
Person类:61
Person类静态方法
{}
123
practice
"""__author__ == Jefferson"""
import json
try:
with open('./data.json','r',encoding='utf-8') as file:
data = json.load(file)
except:
print('读取文佳佳错误')
class Data:
'''数据类'''
def __init__(self):
self.type = ''
self.text = ''
self.user_id = ''
self.name = ''
self.screen_name = ''
self._width = 0
self._height = 0
self._themes = ''
@property
def width(self):
return self._width
@width.setter
def width(self,value):
if value.isdigit():
self._width = int(value)
else:
print('转换出错!')
@property
def height(self):
return self._height
@height.setter
def height(self, value):
if value.isdigit():
self._height = int(value)
else:
print('转换出错!')
@property
def themes(self):
return self._themes
@themes.setter
def themes(self, value):
if value == None:
self._themes = '无'
else:
self._themes = value
def __str__(self):
return 'type:'+self.type+'\ntext:'+self.text+\
'\nuser_id:'+self.user_id+'\nname:'+\
self.name+'\nscreen_name:'+self.screen_name+\
'\nwidth:%s'%self.width+'\nheight:%d'%self.height+\
'\nthemes:'+self.themes
@classmethod
def data_in(cls,dic):
d = cls()
for key in dic:
if key == 'width':
d.width = dic['width']
elif key == 'height':
d.height = dic['height']
elif key == 'themes':
d.themes = dic['themes']
else:
d.__setattr__(key,dic[key])
return d
if __name__ == '__main__':
d1 = Data.data_in(data['data'][0])
d2 = Data.data_in(data['data'][1])
print(d1)
print()
print(d2)
type:41
text:胡萝卜造型的可爱多功能雨伞,了解一下
user_id:21088861
name:蒙面女侠Y
screen_name:蒙面女侠Y
width:360
height:636
themes:无
type:41
text:水陆两栖,自由变换,还不快来围观一下吗!
user_id:15262111
name:共醉江湖
screen_name:共醉江湖
width:1024
height:576
themes:无
练习 员工管理系统
"""__author__ == Jefferson"""
import json
operater = 1#预设操作人员
staff_info = {'worker_id': 0, 'staffs': [], 'department': []}
class Staff:
number = len(staff_info['staffs'])
staff_id = staff_info['worker_id']
def __init__(self):
self.name = ''
self._age = 0
self.job_number = 'python1805'
self._salary = 0
self.position = '员工'
self.department = '流水线'
def __str__(self):
return '员工信息:\n姓名:'+self.name+'\n年龄:%d'%self.age+'\n工号:'+self.job_number+'\n薪资:%d'%self.salary+'\n职位:'+self.position+'\n部门:'+self.department
@classmethod
def load(cls,dic):
staff = cls()
for key in dic:
if key == 'age':
staff.age = dic['age']
elif key == 'salary':
staff.salary = dic['salary']
else:
staff.__setattr__(key,dic[key])
return staff
@property
def age(self):
return self._age
@age.setter
def age(self,value):
while value.isdigit()!=True or int(value) < 15 or int(value) > 100:
value = input('你输入的年龄不合法,请重新输入:')
self._age = int(value)
@property
def salary(self):
return self._salary
@salary.setter
def salary(self, value):
while value.isdigit() != True or int(value) < 0:
value = input('你输入的工资不合法,请重新输入:')
self._salary = int(value)
@classmethod
def add_staff(cls):
staff = cls()
print('新员工入职')
cls.staff_id += 1
staff.job_number = 'python1805'+str(cls.staff_id).rjust(3,'0')
staff.name = input('员工姓名:')
staff.age = input('年龄:')
staff.salary = input('薪资:')
staff.position = input('请输入员工职位:')
while True:
print('请选择部门')
for index in range(len(staff_info['department'])):
print('%d. %s'%(index+1,staff_info['department'][index]))
i = input('请输入部门序号:')
if i.isdigit()==False or int(i)<=0 or int(i)>index+1:
print('请输入正确的序号.')
else:
staff.department = staff_info['department'][int(i)-1]
break
print('添加成功!')
staff_info['staffs'].append(staff)
@classmethod
def del_staff(cls):
job_number = input('请输入要删除的员工号:')
i = 0
for iterm in staff_info['staffs']:
if iterm.job_number == job_number:
print('员工信息:\n',iterm)
staff_info['staffs'].remove(iterm)
print('员工已删除!')
i += 1
break
if i == 0:
print('该员工不存在!')
@staticmethod
def find_staff():
name = input('请输入要查找的员工姓名:')
i = 0
for item in staff_info['staffs']:
if item.name == name:
print('查找结果:')
print(item)
i+=1
if i == 0:
print('该员工不存在!')
@staticmethod
def find_salary():
print('请选择部门:')
while True:
print('请选择部门')
for index in range(len(staff_info['department'])):
print('%d. %s'%(index+1,staff_info['department'][index]))
i = input('请输入部门序号:')
if i.isdigit()==False or int(i)<=0 or int(i)>index+1:
print('请输入正确的序号.')
else:
break
staff = staff_info['staffs'][0]
for item in staff_info['staffs']:
if item.department == staff_info['department'][int(i)-1] and item.salary >staff.salary:
staff = item
print('工资最高的员工信息如下:')
print(staff)
@staticmethod
def avg_age():
age_sum = 0
for item in staff_info['staffs']:
age_sum += item.age
print('公司全体员工的平均年龄为:%.1f'%(age_sum/len(staff_info['staffs'])))
@staticmethod
def add_department():
department = input('请输入要添加的部门名称:')
for item in staff_info['department']:
if item == department:
return '该部门已存在!'
staff_info['department'].append(department)
return '添加成功!'
try:
with open('./Infomation.json','r',encoding='utf-8') as file:
info = json.load(file)
for index in range(len(info['staffs'])):
staff_info['staffs'].append(Staff.load(info['staffs'][index]))
staff_info['worker_id'] = info['worker_id']
staff_info['department'] = info['department']
except:
file = open('./Infomation.json','w')
file.close()
#主菜单函数
def menu():
while True:
if operater != '':
print('\tStaff Management\t'.center(36,'*'))
print('**'+'\t1. 员工入职\t'.center(29,' ')+' **')
print('**' + '\t2. 删除员工\t'.center(29, ' ') + ' **')
print('**' + '\t3. 查找员工\t'.center(29, ' ') + ' **')
print('**' + '\t4. 薪资最高\t'.center(29, ' ') + ' **')
print('**' + '\t5. 平均年龄\t'.center(29, ' ') + ' **')
print('**' + '\t6. 添加部门\t'.center(29, ' ') + ' **')
print('**' + '\t7. 退出系统\t'.center(29, ' ') + ' **')
print('*'*40)
while True:
n = input('请选择要执行的操作:')
if n == '1':
Staff.add_staff()
break
elif n == '2':
Staff.del_staff()
break
elif n == '3':
Staff.find_staff()
input()
break
elif n == '4':
Staff.find_salary()
break
elif n == '5':
Staff.avg_age()
break
elif n == '6':
print(Staff.add_department())
break
elif n == '7':
with open('./Infomation.json', 'w') as file:
for index in range(len(staff_info['staffs'])):
staff_info['staffs'][index] = staff_info['staffs'][index].__dict__
json.dump(staff_info,file)
exit()
else:
print('请输入正确的序号!')
if __name__ == '__main__':
menu()
********* Staff Management *********
** 1. 员工入职 **
** 2. 删除员工 **
** 3. 查找员工 **
** 4. 薪资最高 **
** 5. 平均年龄 **
** 6. 添加部门 **
** 7. 退出系统 **
****************************************
请选择要执行的操作:6
请输入要添加的部门名称:迎宾
添加成功!
********* Staff Management *********
** 1. 员工入职 **
** 2. 删除员工 **
** 3. 查找员工 **
** 4. 薪资最高 **
** 5. 平均年龄 **
** 6. 添加部门 **
** 7. 退出系统 **
****************************************
请选择要执行的操作:收银
请输入正确的序号!
请选择要执行的操作:6
请输入要添加的部门名称:收银
该部门已存在!
********* Staff Management *********
** 1. 员工入职 **
** 2. 删除员工 **
** 3. 查找员工 **
** 4. 薪资最高 **
** 5. 平均年龄 **
** 6. 添加部门 **
** 7. 退出系统 **
****************************************
请选择要执行的操作:1
新员工入职
员工姓名:张三
年龄:21
薪资:1523
请输入员工职位:员工
请选择部门
1. 收银
2. 海鲜
3. 熟食
4. 迎宾
请输入部门序号:2
添加成功!
********* Staff Management *********
** 1. 员工入职 **
** 2. 删除员工 **
** 3. 查找员工 **
** 4. 薪资最高 **
** 5. 平均年龄 **
** 6. 添加部门 **
** 7. 退出系统 **
****************************************
请选择要执行的操作:1
新员工入职
员工姓名:李四
年龄:35
薪资:25000
请输入员工职位:主管
请选择部门
1. 收银
2. 海鲜
3. 熟食
4. 迎宾
请输入部门序号:2
添加成功!
********* Staff Management *********
** 1. 员工入职 **
** 2. 删除员工 **
** 3. 查找员工 **
** 4. 薪资最高 **
** 5. 平均年龄 **
** 6. 添加部门 **
** 7. 退出系统 **
****************************************
请选择要执行的操作:1
新员工入职
员工姓名:王五
年龄:32
薪资:2533
请输入员工职位:员工
请选择部门
1. 收银
2. 海鲜
3. 熟食
4. 迎宾
请输入部门序号:1
添加成功!
********* Staff Management *********
** 1. 员工入职 **
** 2. 删除员工 **
** 3. 查找员工 **
** 4. 薪资最高 **
** 5. 平均年龄 **
** 6. 添加部门 **
** 7. 退出系统 **
****************************************
请选择要执行的操作:3
请输入要查找的员工姓名:张三
查找结果:
员工信息:
姓名:张三
年龄:21
工号:python1805001
薪资:1523
职位:员工
部门:海鲜
********* Staff Management *********
** 1. 员工入职 **
** 2. 删除员工 **
** 3. 查找员工 **
** 4. 薪资最高 **
** 5. 平均年龄 **
** 6. 添加部门 **
** 7. 退出系统 **
****************************************
请选择要执行的操作:请输入正确的序号!
请选择要执行的操作:
请输入正确的序号!
请选择要执行的操作:3
请输入要查找的员工姓名:李四
查找结果:
员工信息:
姓名:李四
年龄:25
工号:python1805001
薪资:1324
职位:员工
部门:收银
查找结果:
员工信息:
姓名:李四
年龄:35
工号:python1805002
薪资:25000
职位:主管
部门:海鲜
********* Staff Management *********
** 1. 员工入职 **
** 2. 删除员工 **
** 3. 查找员工 **
** 4. 薪资最高 **
** 5. 平均年龄 **
** 6. 添加部门 **
** 7. 退出系统 **
****************************************
请选择要执行的操作:请输入正确的序号!
请选择要执行的操作:2
请输入要删除的员工号:python1805001
员工信息:
员工信息:
姓名:李四
年龄:25
工号:python1805001
薪资:1324
职位:员工
部门:收银
员工已删除!
********* Staff Management *********
** 1. 员工入职 **
** 2. 删除员工 **
** 3. 查找员工 **
** 4. 薪资最高 **
** 5. 平均年龄 **
** 6. 添加部门 **
** 7. 退出系统 **
****************************************
请选择要执行的操作:4
请选择部门:
请选择部门
1. 收银
2. 海鲜
3. 熟食
4. 迎宾
请输入部门序号:1
工资最高的员工信息如下:
员工信息:
姓名:王五
年龄:32
工号:python1805003
薪资:2533
职位:员工
部门:收银
********* Staff Management *********
** 1. 员工入职 **
** 2. 删除员工 **
** 3. 查找员工 **
** 4. 薪资最高 **
** 5. 平均年龄 **
** 6. 添加部门 **
** 7. 退出系统 **
****************************************
请选择要执行的操作:3
请输入要查找的员工姓名:王五
查找结果:
员工信息:
姓名:王五
年龄:32
工号:python1805003
薪资:2533
职位:员工
部门:收银
********* Staff Management *********
** 1. 员工入职 **
** 2. 删除员工 **
** 3. 查找员工 **
** 4. 薪资最高 **
** 5. 平均年龄 **
** 6. 添加部门 **
** 7. 退出系统 **
****************************************
请选择要执行的操作:4
请选择部门:
请选择部门
1. 收银
2. 海鲜
3. 熟食
4. 迎宾
请输入部门序号:2
工资最高的员工信息如下:
员工信息:
姓名:李四
年龄:35
工号:python1805002
薪资:25000
职位:主管
部门:海鲜
********* Staff Management *********
** 1. 员工入职 **
** 2. 删除员工 **
** 3. 查找员工 **
** 4. 薪资最高 **
** 5. 平均年龄 **
** 6. 添加部门 **
** 7. 退出系统 **
****************************************
请选择要执行的操作:5
公司全体员工的平均年龄为:29.3
********* Staff Management *********
** 1. 员工入职 **
** 2. 删除员工 **
** 3. 查找员工 **
** 4. 薪资最高 **
** 5. 平均年龄 **
** 6. 添加部门 **
** 7. 退出系统 **
****************************************
请选择要执行的操作:7
网友评论