当前位置: 首页 > news >正文

Python语法学习-5

第十一章 面向对象程序设计

11.1 面向对象的基本概念

在这里插入图片描述
在这里插入图片描述

11.2 类和实例

在这里插入图片描述
在这里插入图片描述

11.3 魔法方法

在这里插入图片描述

11.4 本章总结

在这里插入图片描述

11.5 代码练习

类的创建

class Player(object): # object 基类pass# 类的实例化(创建对象)
tom = Player()
print(type(tom))
print(isinstance(tom,object))
print(isinstance(tom,Player))

实例属性

class Player(object):# 构造函数def __init__(self,name,age,city):  # 初始化函数(构造函数)self.name=nameself.age=ageself.city=citymia = Player('mia',24,'上海')
mia.city = '杭州'
tom = Player('tom',34,'重庆')
tom.height = 180
tom.age = 32
# 获取实例(对象)的所有属性
print(tom.__dict__)# 武器:名字 攻击值 等级
class weapon(object):def __init__(self,name,damage,level):self.name = nameself.damage = damageself.level = levelgun = weapon('magic', 1000, 3)
print(gun.__dict__)

类属性

class Player(object):# 类属性numbers = 0# 初始化函数(构造函数)def __init__(self,name,age,city):self.name = nameself.age = ageself.city = cityPlayer.numbers += 1mia = Player('mia', 24, '上海')
print(mia.__dict__)
print('欢迎荣耀王者的第 %d 个玩家注册!' % Player.numbers)
tom = Player('tom', 32, '重庆')
print('欢迎荣耀王者的第 %d 个玩家注册!' % Player.numbers)class weapon(object):numbers = 0max_damage = 10000levels = ['青铜', '白银', '黄金', '钻石', '王者']def __init__(self,name,damage,level):self.name = nameself.damage = damageself.level = levelweapon.numbers +=1if damage>weapon.max_damage:raise Exception('最大的伤害值是10000,请重试!')if level not in weapon.levels:raise Exception('段位设置错误!')try:gun = weapon('magic',1000,'王者')print(weapon.numbers)arrow = weapon('arrow',450,'青铜')print(weapon.numbers)
except Exception as e:print(e)

实例方法

class Player(object):# 类属性numbers = 0levels = ['青铜', '白银', '黄金', '钻石', '王者']def __init__(self,name,age,city,level):# 实例属性self.name = nameself.age = ageself.city = cityif level not in Player.levels:raise Exception('段位设置错误!')else:self.level = levelPlayer.numbers += 1# 实例的方法def show(self):print('我是荣耀王者的第%d个玩家,我的名字是%s,我来自 %s,我的段位是%s' % (Player.numbers,self.name,self.city,self.level))def level_up(self):index1 = Player.levels.index(self.level)if index1<len(Player.levels)-1:self.level = Player.levels[index1+1]def get_weapon(self,weapon):self.weapon = weapondef show_weapon(self):return self.weapon.show_weapon()class weapon(object):numbers = 0max_damage = 10000levels = ['青铜','白银','黄金','钻石','王者']def __init__(self,name,damage,level):self.name = nameself.damage = damageself.level = levelweapon.numbers += 1if damage>weapon.max_damage:raise Exception('最大的伤害值是10000,请重试!')if level not in weapon.levels:raise Exception('段位设置错误!')def show_weapon(self):for k,v in self.__dict__.items():print(k,v)mia = Player('mia',24,'大连','青铜')
mia.show()
mia.level_up()
mia.show()
mia.level_up()
mia.show()
mia.level_up()
mia.show()
mia.level_up()
mia.show()
mia.level_up()
mia.show()
gun = weapon('magic_gun',1000,'青铜')
mia.get_weapon(gun)
mia.show_weapon()

类方法

class Player(object):numbers = 0   # 类属性levels = ['青铜', '白银', '黄金', '钻石', '王者']def __init__(self,name,age,city,level):  # 初始化函数(构造函数)self.name = name  # 实例属性self.age = ageself.city = cityif level not in Player.levels:raise Exception('段位设置错误!')else:self.level = levelPlayer.numbers += 1def show(self):  # 实例的方法print('我是荣耀王者的第%d个玩家,我的名字是%s,我来自 %s,我的段位是%s' % (Player.numbers,self.name,self.city,self.level))def level_up(self):index1 = Player.levels.index(self.level)if index1<len(Player.levels)-1:self.level = Player.levels[index1+1]def get_weapon(self,weapon):self.weapon = weapondef show_weapon(self):return self.weapon.show_weapon()# 类方法@classmethoddef get_players(cls):print('荣耀王者的用户数量已经达到了%d人' % cls.numbers)mia = Player('mia',24,'湖北','青铜')
mia.show()
Player.get_players()class weapon(object):# 类属性numbers = 0max_damage = 10000levels = ['青铜','白银','黄金','钻石','王者']all_weapons = []# 构造方法def __init__(self,name,damage,level):self.name = nameself.damage = damageself.level = levelweapon.numbers += 1if damage>weapon.max_damage:raise Exception('最大的伤害值是10000,请重试!')if level not in weapon.levels:raise Exception('段位设置错误!')weapon.all_weapons.append(self)@classmethoddef get_max_damage(cls):max_damage = 0for w in cls.all_weapons:if w.damage>max_damage:max_damage = w.damagereturn max_damagedef show_weapon(self):for k,v in self.__dict__.items():print(k,v)gun = weapon('magic',345,'青铜')
a = weapon('a',34,'白银')
b = weapon('b',123,'白银')
print(weapon.get_max_damage())'''
类属性
类方法
实例属性
实例方法
'''

静态方法

class Player(object):numbers = 0   # 类属性levels = ['青铜', '白银', '黄金', '钻石', '王者']def __init__(self,name,age,city,level):  # 初始化函数(构造函数)self.name = name  # 实例属性self.age = ageself.city = cityif level not in Player.levels:raise Exception('段位设置错误!')else:self.level = levelPlayer.numbers += 1def show(self):  # 实例的方法print('我是荣耀王者的第%d个玩家,我的名字是%s,我来自 %s,我的段位是%s' % (Player.numbers,self.name,self.city,self.level))def level_up(self):index1 = Player.levels.index(self.level)if index1<len(Player.levels)-1:self.level = Player.levels[index1+1]def get_weapon(self,weapon):self.weapon = weapondef show_weapon(self):return self.weapon.show_weapon()@classmethoddef get_players(cls):  # 类方法print('荣耀王者的用户数量已经达到了%d人'%cls.numbers)@staticmethoddef isvalid(**kwargs):if kwargs['age']>18:return Trueelse:return Falseinfos = {'name':'mia','age':13,'city':'北京','level':'白银'}
if Player.isvalid(**infos):mia = Player('mia',24,'北京','白银')
else:print('请检查')class weapon(object):# 类属性numbers = 0max_damage = 10000levels = ['青铜','白银','黄金','钻石','王者']all_weapons = []# 构造方法def __init__(self,name,damage,level):self.name = nameself.damage = damageself.level = levelweapon.numbers += 1if damage>weapon.max_damage:raise Exception('最大的伤害值是10000,请重试!')if level not in weapon.levels:raise Exception('段位设置错误!')weapon.all_weapons.append(self)@classmethoddef get_max_damage(cls):max_damage = 0for w in cls.all_weapons:if w.damage>max_damage:max_damage = w.damagereturn max_damagedef show_weapon(self):for k,v in self.__dict__.items():print(k,v)

继承

# 面向对象特点:继承、多态、封装
class Player(object): # 父类numbers = 0   # 类属性levels = ['青铜', '白银', '黄金', '钻石', '王者']def __init__(self,name,age,city,level):  # 初始化函数(构造函数)self.name = name  # 实例属性self.age = ageself.city = cityif level not in Player.levels:raise Exception('段位设置错误!')else:self.level = levelPlayer.numbers += 1def show(self):  # 实例的方法print('我是荣耀王者的第%d个玩家,我的名字是%s,我来自 %s,我的段位是%s' % (Player.numbers,self.name,self.city,self.level))def level_up(self):index1 = Player.levels.index(self.level)if index1<len(Player.levels)-1:self.level = Player.levels[index1+1]def get_weapon(self,weapon):self.weapon = weapondef show_weapon(self):return self.weapon.show_weapon()@classmethoddef get_players(cls):  # 类方法print('荣耀王者的用户数量已经达到了%d人'%cls.numbers)@staticmethoddef isvalid(**kwargs):if kwargs['age']>18:return Trueelse:return False# 子类
class VIP(Player):def __init__(self,name,age,city,level,coin):# 调用父类的构造方法super().__init__(name,age,city,level)self.coin = coin# 实例方法重写def show(self):print('我是荣耀王者的第%d个玩家,我的名字是%s,我来自 %s,我的段位是%s,我的余额是%d' % (Player.numbers, self.name,self.city, self.level,self.coin))
mia = VIP('mia',24,'哈尔滨','黄金',100)
mia.show()

封装

# 封装
class User(object):def __init__(self,name,age):# 受保护的变量self._name = name# 私有变量self.__age = age# 获取变量@propertydef age(self):return self.__age# 变量的修改器@age.setterdef age(self,age):if isinstance(age,int):self.__age = ageelse:raise Exception('年龄只能是整数')def show_infos(self):print('大家好,我是%s,我今年%d' % (self._name, self.__age))mia = User('mia',24)
# print(mia.get_age())
# mia.set_age('二十五')
# print(mia.get_age())
'''
print(mia.age)
mia.age=25
print(mia.age)
'''
print(mia.age)
mia.age = '二十五'
print(mia.age)

多态

class Animal(object):def speak(self):print('动物的叫声')passclass Cat(Animal):def speak(self):print('喵喵')class Dog(Animal):def speak(self):print('汪汪')class Test(object):def speak(self):print('test')def speak(object):  # animalobject.speak()animal = Animal()
kitty = Cat()
puppy = Dog()
t = Test()
speak(animal)
speak(kitty)
speak(puppy)
speak(t)

魔法方法

class User(object):def __init__(self,name):  # 构造函数print('__init__被调用')self.name = namedef __str__(self):return '我的名字是%s'%self.namedef __add__(self, other):return self.name + other.namedef __eq__(self, other):return self.name == other.namemia = User('mia')
print(str(mia))
print(mia)
print(1+3)
print('hi '+'mia')
jack = User('mia')
print(mia+jack)
print(6==7)
print(mia==jack)

11.6 学生管理系统练习

'''
需求:学生管理系统学生
老师
班级
课程'''
class User(object):def __init__(self,name,age,gender,id_number):self.name = nameself.age = ageself.gender = genderself.id_number = id_numberdef show_infos(self):  # 显示学生信息print('*'*30)print('姓名:%s'%self.name)print('年龄:%d'%self.age)print('性别:%s'%self.gender)print('学(工)号:%d'%self.id_number)print('*'*30)class Student(User):# 属性:姓名、年龄、性别、学号def __init__(self,name,age,gender,id_number):super().__init__(name,age,gender,id_number)self.courses = []def show_infos(self):  # 显示学生信息super().show_infos()print('该学生的选课信息:')if self.courses==[]:print('未选课')else:for i in self.courses:print(i.name)print('*'*15+'学生信息'+'*'*15)def add_course(self,course):self.courses.append(course)class Teacher(User):# 属性:姓名、年龄、性别、工号、是否是导员、班级列表def __init__(self,name,age,genger,id_number,dao,cla):super().__init__(name,age,genger,id_number)self.dao = daoself.cla = cladef show_infos(self):super().show_infos()print('是否是辅导员:%s'%['否','是'][self.dao])print('辅导班级:')if not self.cla:print('空')else:for i in self.cla:print(i)print('*'*30)class Cla(object):  # 班级# 属性:班级名称、班级号、辅导员、学生def __init__(self,name,id_number,teacher,students):self.name = nameself.id_number = id_numberself.teacher = teacherself.students = studentsdef show_infos(self):print('*'*15 + '班级信息'+ '*'*15)print('班级名称:%s'%self.name)print('班级班号:%d'%self.id_number)print('辅导员:%s'%self.teacher.name)print('学生信息:')if not self.students:print('空')else:for i in self.students:print(i.name)print('*' * 15 + '班级信息' + '*' * 15)def add_student(self,student):  # 增加学生if student in self.students:raise Exception('此学生已进班,不允许重复操作!')else:self.students.append(student)return Truedef sub_student(self,student):  # 减少学生if student in self.students:self.students.remove(student)return Trueelse:raise Exception('此学生不在本班级!')class Course(object):  # 课程# 属性:课名、课程id、老师、学生列表、课程性质、课程容量courses = []       # 类属性def __init__(self,name,id_number,teacher,students,type,number):self._name = nameself.id_number = id_numberself.teacher =teacherself.students = studentsself.type = typeself.number = numberself.student_number = len(self.students)self.valid_number = self.number - self.student_numberCourse.courses.append(self.name)@propertydef name(self):return self._name@name.setterdef name(self,name):if name=='':raise  Exception('出现错误')if not isinstance(name,str) :raise  Exception('出现错误')self._name = namedef show_infos(self):print('*' * 15 + '课程信息' + '*' * 15)print('课程名称:%s' % self.name)print('课程号:%d' % self.id_number)print('授课老师:%s' % self.teacher.name)print(self.type)print('课程容量:%d' % self.number)print('已选学生人数:%d' % self.student_number)print('剩余学生空位:%d' % self.valid_number)print('学生信息:')if not self.students:print('空')else:for i in self.students:print(i.name)print('*' * 15 + '课程信息' + '*' * 15)def add_student(self,student):if student in self.students:raise Exception('学生重复!')if self.valid_number==0:raise Exception('此课程已满,请选择其他课程')self.students.append(student)self.valid_number -=1self.student_number+=1student.add_course(self)return Truedef sub_student(self,student):if student not in self.students:raise Exception('此学生未报名该课程!')self.students.remove(student)self.valid_number +=1self.student_number -=1return  True@classmethoddef show_courseList(cls):return cls.courses# 创建学生对象
mia = Student('mia',19,'女',1)
rose = Student('rose',20,'女',2)
lily = Student('lily',18,'女',3)
# 创建教师对象
jack = Teacher('jack',50,'男',5,False,[])
tom = Teacher('tom',26,'女',53,True,['计算机二班','法律三班'])
# 创建班级对象
computer_2 = Cla('计算机二班',1002,tom,[])
computer_1 = Cla('计算机一班',1001,tom,[mia])
# 创建课程对象
python = Course('python',1,jack,[mia,rose],'必修课',6)
java = Course('java',2,tom,[mia,rose,lily],'选修课',4)
python.add_student(lily)
python.sub_student(mia)
python.show_infos()
lily.show_infos()
print(Course.show_courseList())
python.name = 'python精讲课程'
print(python.name)
http://www.dtcms.com/a/431902.html

相关文章:

  • 网站建设中asp文件网站为什么具有网络营销价值
  • display ospf lsdb brief 概念及题目
  • 建设网站平台wordpress 自己写首页
  • 国庆特别篇:使用 Three.js 绘制中国国旗
  • display ospf peer 概念及题目
  • 数据治理5-企业数据质量建设与实战
  • zf厂手表网站北京房产网站大全
  • 线上营销的优势东莞公司seo优化
  • 建网站的公司赚钱吗手机网站建设技术方案
  • 网站设计与实现毕业设计美橙互联网站备案平台
  • 第10章 Git
  • 为AI语音交互“瘦身”:基于Flet与Sherpa-onnx的端侧STT实战
  • 电子商务网站规划与建设论文路由硬盘做网站空间不
  • 可视化 网站开发工具自动seo优化
  • AI赋能下的SEO关键词优化路径探讨与实战经验分享
  • 深入理解 Linux 进程间通信(上):管道技术全解析
  • 【Linux 系统】进程优先级
  • 滕州网站建设企业自己人网站建设
  • 手机做服务器建网站旅游网官网首页
  • 网站内容丰富哪些网站可以做go注释
  • 怎么建立网站快捷方式网站建设与管理 教材
  • 做网站如何保证询盘数量上海到北京飞机几个小时
  • 大模型Agent五大工作模式深度解析
  • 网站制作和设计需要多少钱ie浏览器手机版下载
  • 网站安全监测预警平台建设成效3.常见的网站建设工具有
  • Day05_ARM裸机
  • 机电公司管理小程序|基于微信小程序的机电公司管理小程序设计与实现(源码+数据库+文档)
  • 金融公司网站设计图贵州网站开发制作公司
  • 自己做ppt网站湖北系统建站怎么用
  • 如何自建网站接广告大连网站推广怎么收费