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

day02-面向对象高级

私有属性的意义

''' 封装数据属性: 明确的区分内外 保护数据 '''# 1. 定义一个Girl类classGirl(object):# 定义公有属性 和 私有属性def__init__(self,name):self.name=name self.__age=18# 如果一个类中存在私有属性 一定有 set 和 get方法defset_age(self,age):# 区分内外 过滤掉 外部的异常属性 起到保护数据的作用ifnotisinstance(age,int):print('很抱歉 你的输入有误! 请输入数字类型!')if18<=age<=100:self.__age=ageelse:print('很抱歉 你的年龄不符合要求 ')returndefget_age(self):# 额外添加权限的验证功能# 如果有权限 才可以访问# 反之拒绝用户访问returnself.__age# 实例化对象g1=Girl('小妹')# 设置私有属性值g1.set_age(25)# 获取私有属性print(g1.name)print(g1.get_age())

私有方法的意义

''' 私有方法主要用于降低程序的复杂度 '''# 没有私有方法classATM(object):defcard(self):print('插卡')defauth(self):print('验证权限')definput_money(self):print('输入取款金额')defbill(self):print('账单')deftake_money(self):print('取款')# 实例化类 创建对象atm=ATM()# 取款atm.card()atm.auth()atm.input_money()atm.bill()atm.take_money()

私有方法的意义

''' 有私有方法 '''classATM(object):# 定义私有方法def__card(self):print('插卡')# 验证权限def__auth(self):print('权限')# 输入取款金额def__input_money(self):print('输入取款金额')# 打印账单def__bill(self):print('账单')# 取款def__take_money(self):print('取款')# 定义一个公有方法 直接对外defwithdraw(self):self.__card()self.__auth()self.__input_money()self.__bill()self.__take_money()# 实例化对象atm=ATM()# 调用公有方法 取款atm.withdraw()# 没有私有方法 只能一个一个调用 用私有方法可以直接调用

类的继承

''' 类的继承 实现代码的重用 减少冗余代码 '''# 定义一个父类Person()classPerson(object):# 定义公共方法defeat(self):print('i can eat food ')defspeak(self):print('i can speak ')def__say_hello(self):print('say hello!')# 定义一个子类 => TeacherclassTeacher(Person):pass# 定义一个子类 => StudentclassStudent(Person):pass# 实例化类 创建对象teacher=Teacher()student=Student()teacher.eat()teacher.speak()teacher.__say_hello()# 私有方法不能继承

Python中的单继承

''' 单继承 同一时间 最多只能继承自某一个已有类 '''# 定义Car 类classCar(object):# 定义一个公共方法defrun(self):print('i can run')# 定义一个油车类classGasolineCar(Car):pass# 定义一个电车类classElectricCar(Car):pass# 实例化操作bmw=GasolineCar()bmw.run()# 单继承只能继承一个父类

类的继承之多层继承

''' 结论:A继承B,B继承C,则A也会继承C 中的所有公有属性和公有方法 => 继承中的传递性 '''classC(object):# 定于一个公共方法deffunc_c(self):print('c')classB(C):# 继承的同时 扩展自身类deffunc_b(self):print('b')classA(B):pass# 实例化A类 创建对象a=A()a.func_b()a.func_c()# 单继承具有传递特性 多层继承

类的多继承特性

''' 多继承 一个类同时继承自多个父类的情况 好处 可以拥有多个类的公有属性和公有方法 '''# 定义油车类classGasolineCar(object):defrun_with_gasoline(self):print('gas')# 定义电车类classElectricCar(object):defrun_with_electric(self):print('electric')# 定义混动车类classHybridCar(GasolineCar,ElectricCar):passtesla=HybridCar()tesla.run_with_electric()tesla.run_with_gasoline()

子类的重写操作

''' 扩展: 子类继承父类的同时 子类应该拥有自己的属性和方法 重写: 如果子类继承了父类 子类中有相同名字的方法或属性 子类的会覆盖父类的 子类优先 '''# 定义一个Animal类classAnimal(object):# 定义一个公共方法defeat(self):print('eat')defcall(self):print('call')# 定义一个Cat子类classCat(Animal):# 在子类中对父类方法进行重写defcall(self):# 强调父类中有这个方法 => 可以在子类中重写print('miao miao')# 定义一个Dog类classDog(Animal):defcall(self):print('wang wang')# 实例化操作cat=Cat()dog=Dog()cat.call()dog.call()# 在子类中 不仅可以扩展父类方法 也可以重写父类方法animal=Animal()animal.call()

重写中的super()方法

''' 当子类重写了父类中的方法 我们还需要调用父类中被重写的方法时 使用 super() '''# 定义一个类classCar(object):# 定义公有属性def__init__(self,brand,model,color):self.brand=brand self.model=model self.color=color# 定义一个子类classElectricCar(Car):# 定义公有属性def__init__(self,brand,model,color,battery):# 继承父类中的__init__()方法 从而实现继承super().__init__(brand,model,color)self.battery=batterydefrun(self):print('i can run with electric')# 实例化对象tesla=ElectricCar('tesla','model 3','blue','70')print(tesla.battery)print(tesla.brand)print(tesla.model)print(tesla.color)tesla.run()

MRO详解类与类之间的继承关系

''' 子类.__mro__ 或 子类.mro() 帮我了解 类与类之间继承关系 '''# 定义一个父类classCar(object):# 定义公共属性def__init__(self,brand,model,color):self.brand=brand self.model=model self.color=color# 定义一个公共方法defrun(self):print('i can run')# 定义一个子类classGasolineCar(Car):defrun(self):print('gas')# 定义一个子类classElectricCar(Car):def__init__(self,brand,model,color,battery):super().__init__(brand,model,color)self.battery=batterydefrun(self):print('e')# 实例化对象tesla=ElectricCar('tesla','model y','blue','70')tesla.run()# MRO继承链print(ElectricCar.mro())print(ElectricCar.__mro__)

Python中多态特性

''' 1.有继承 不是必须的 2.子类重写父类方法 定义一个公共接口 => 随着传入的子类对象不同 返回不同的结果 '''# 父类classFruit(object):# 公共方法defmakejuice(self):print('i can make juice')# 子类classApple(Fruit):# 重写方法defmakejuice(self):print('apple')classBanana(Fruit):# 重写方法defmakejuice(self):print('banana')# 扩展 增加橘子汁功能classOrange(Fruit):defmakejuice(self):print('orange')# 定义多态方法 参数是一个对象 相当于把对象作为参数进行传递defservice(obj):obj.makejuice()# 创建子类对象apple=Apple()service(apple)banana=Banana()service(banana)orange=Orange()service(orange)

python中多态案例

''' 1 有继承 2 有重写 '''# 定义一个父类classDog(object):defwork(self):pass# 有继承 有重写classArmyDog(Dog):defwork(self):print('追人')classDrugDog(Dog):defwork(self):print('追毒')classXiaoTianDog(Dog):defwork(self):print('吃月亮')# 定义一个公共方法classPerson(object):defwork_with_dog(self,dog):dog.work()# 实例化子类对象armydog=ArmyDog()drugdog=DrugDog()xiaotian=XiaoTianDog()police=Person()police.work_with_dog(armydog)police.work_with_dog(drugdog)police.work_with_dog(xiaotian)

面向对象的类属性

''' 实例属性 每个对象都拥有的属性 => 实例属性 类属性 不是每个对象所拥有的 而是所有对象共同拥有的特征 '''# 定义Student学生类classStudent(object):# 类属性count=0# 实例属性def__init__(self,name):self.name=name# 因为实例化对象会自动调用__init__对象Student.count+=1# 实例化对象s1=Student('XM')s3=Student('Xc')s2=Student('XL')# 调用类属性print(f'当前共实例了{Student.count}')print(f'当前共实例了{s1.count}')print(f'当前共实例了{s2.count}')

面向对象中的类方法

''' 结论 类方法 专门用来调用类属性 起到保护数据的作用 class xxx(): count = 0 @classmethod def get_count(cls): 调用count类属性 => cls.count '''# 创建一个工具类classTool(object):# 定义一个类属性count=0# 定义初始化方法def__init__(self,name):self.name=name Tool.count+=1# 定义一个类方法 用于获取类属性@classmethoddefget_count(cls):print(f'当前Tools类中共有{cls.count}个')t1=Tool('1')t2=Tool('2')t3=Tool('3')Tool.get_count()

面向对象中的静态方法

''' 独立函数 不需要调用自身属性也不需要调用自身方法 '''classGame(object):# 定义一个静态menu方法@staticmethoddefmenu():print('开始')print('暂停')print('关闭')# 调用动态方法# 类可以调用Game.menu()# 对象也能调用game=Game()game.menu()

面向对象的综合案例

''' 需求分析 设计一个`Game`类 属性: 定义一个类属性`top_score`记录游戏的历史最高分 定义一个实例属性`player_name`记录当前游戏的玩家姓名 方法: 静态方法`show_help`显示游戏帮助信息 类方法`show_top_score`显示历史最高分 实例方法`start_game`开始当前玩家的游戏 '''classGame(object):top_score=0def__init__(self,player_name):self.player_name=player_name# 静态方法@staticmethoddefshow_help():print('1、开始游戏')print('1、暂停游戏')print('1、关闭游戏')@classmethoddefshow_top_score(cls):print(f'游戏最高分为{cls.top_score}')defstart_game(self):print(f'{self.player_name}开始游戏')
http://www.cnnetsun.cn/news/1664784.html

相关文章:

  • 动漫头像秒变真人!AnythingtoRealCharacters2511零基础5分钟上手教程
  • 模拟与数字
  • 解决Dell G15散热烦恼:轻量级开源控制中心为游戏玩家打造的散热解决方案
  • 网盘直链下载助手:八大网盘真实链接一键获取,告别下载限速烦恼
  • Qwen3.5-9B-AWQ-4bit应用指南:电商商品图识别与描述实战
  • 【Python内存管理终极指南】:20年C Python源码深度解析,揭开GC、引用计数与内存池协同机制的黑盒
  • 5G时代边缘计算:万亿市场架构、场景落地与工程实现(上篇)上篇:核心理论与产业架构全解析
  • javaweb学生档案成绩签到管理系统设计与实现
  • 没有西装怎么拍正装证件照?证件照换正装教程
  • intv_ai_mk11效果惊艳:从‘写Python函数计算斐波那契’到‘生成Flask API完整项目’
  • OpenClaw内存优化:千问3.5-35B-A3B-FP8在8GB设备上的稳定运行方案
  • 智能工具如何提升碧蓝航线游戏效率:从重复操作中解放的实战指南
  • 3大核心优势+4类场景方案:Lenovo Legion Toolkit让游戏本性能释放提升30%
  • Elsevier Tracker终极指南:3分钟搞定学术论文审稿状态追踪
  • 从零开始掌握微分方程:同济高数第七章实战解析
  • 2025年苹果新规解读:你的AFNetworking、SDWebImage等老库如何手动添加隐私清单文件
  • EasyAnimateV5图生视频效果实测:RTX 4090D下49帧@1024p生成耗时分析
  • 通义千问2.5-7B-Instruct部署成本揭秘:GPU按需计费实战优化
  • 32位MCU轻量级OTA方案设计与实现
  • iDILI研究新路径|肝脏器官芯片联合PBMC解析单抗药物肝毒性机制【曼博生物-CNBIO器官芯片】
  • 5步实现图表数据提取自动化:用WebPlotDigitizer提升科研效率80%
  • 数据提取与图表解析工具:WebPlotDigitizer 全面指南
  • 通义千问2.5-7B-Instruct环境部署:Docker镜像快速启动教程
  • CentOS7下Oracle19C静默安装全攻略(避坑指南)
  • PROJECT MOGFACE效率对比:与传统C语言实现相同逻辑任务的代码量及性能分析
  • DriverStore Explorer:Windows驱动仓库深度管理工具,释放系统潜能的专业指南
  • PySide6信号槽的‘潜规则’:从订阅发布模式看如何设计松耦合的代码
  • 3分钟打造个性化Windows任务栏:TranslucentTB完全指南
  • GHelper:华硕笔记本轻量化控制工具,彻底告别臃肿的Armoury Crate
  • nmapAutomator工具集成:如何自动运行ffuf、gobuster等侦察工具