国外二手表网站网站滑动效果怎么做的
2026/3/9 13:47:35 网站建设 项目流程
国外二手表网站,网站滑动效果怎么做的,大型信息类PC网站适合vue做吗,注册电商平台怎么注册Day 15#xff1a;【99天精通Python】面向对象编程(OOP)中篇 - 封装、继承与多态 前言 欢迎来到第15天#xff01; 在昨天的课程中#xff0c;我们学会了如何定义类和创建对象。但这只是 OOP 的冰山一角。面向对象编程之所以强大#xff0c;归功于它的三大核心特性#xf…Day 15【99天精通Python】面向对象编程(OOP)中篇 - 封装、继承与多态前言欢迎来到第15天在昨天的课程中我们学会了如何定义类和创建对象。但这只是 OOP 的冰山一角。面向对象编程之所以强大归功于它的三大核心特性封装 (Encapsulation)、继承 (Inheritance)和多态 (Polymorphism)。这三个词听起来很高大上但实际上它们是为了解决我们在编程中遇到的实际问题封装为了保护数据不让别人随意修改。继承为了偷懒复用代码爸爸有的儿子不用再写一遍。多态为了灵活同一个指令让不同的对象做不同的事。本节内容私有属性与封装继承的基本语法方法重写 (Overriding)super()函数多态与鸭子类型实战练习一、封装 (Encapsulation)保护你的数据1.1 公有 vs 私有默认情况下Python 类中的属性都是公有 (Public)的在类的外部可以随意访问和修改。这有时候很不安全。classAccount:def__init__(self,balance):self.balancebalance accAccount(100)acc.balance-999999# 外部可以直接修改这太危险了为了保护数据我们可以将属性定义为私有 (Private)。在 Python 中只需要在属性名前加两个下划线__。1.2 私有属性的使用classAccount:def__init__(self,balance):self.__balancebalance# 私有属性defget_balance(self):提供公开的方法获取余额returnself.__balancedefdeposit(self,amount):提供公开的方法修改余额可以在这里加逻辑判断ifamount0:self.__balanceamountelse:print(金额无效)accAccount(1000)# print(acc.__balance) # 报错外部无法访问print(acc.get_balance())# 1000 (通过方法访问)acc.deposit(500)原理Python 实际上是将__balance改名为了_Account__balance名称改写虽然硬要访问也能访问但君子协定我们要遵守规则。二、继承 (Inheritance)子承父业2.1 为什么要继承假设我们要写Cat和Dog两个类它们都有name属性都会eat。如果分别写两个类代码就重复了。我们可以提取一个父类Animal让Cat和Dog去继承它。2.2 定义继承# 父类 (基类)classAnimal:def__init__(self,name):self.namenamedefeat(self):print(f{self.name}正在吃饭...)defsleep(self):print(f{self.name}正在睡觉...)# 子类 (派生类) 继承 AnimalclassDog(Animal):defbark(self):print(汪汪汪)classCat(Animal):defmeow(self):print(喵喵喵)# 测试dogDog(旺财)dog.eat()# 继承自父类的方法 - 旺财 正在吃饭...dog.bark()# 子类独有的方法 - 汪汪汪2.3 方法重写 (Overriding)如果子类对父类的方法不满意可以重新定义它。classBird(Animal):defeat(self):print(f{self.name}正在啄米吃...)# 重写父类的 eatbirdBird(波利)bird.eat()# 波利 正在啄米吃...2.4 super() 函数在子类中如果想调用父类的方法特别是在__init__中需要用到super()。classDog(Animal):def__init__(self,name,breed):# 调用父类的 __init__ 初始化 namesuper().__init__(name)# 再初始化子类独有的 breedself.breedbreed dDog(来福,哈士奇)print(f{d.name}是{d.breed})三、多态 (Polymorphism)一种接口多种形态3.1 什么是多态多态是指不同的子类对象调用相同的父类方法产生不同的执行结果。classAnimal:defspeak(self):passclassDog(Animal):defspeak(self):print(汪汪)classCat(Animal):defspeak(self):print(喵喵)defmake_noise(animal_obj):这个函数接收任何 Animal 对象animal_obj.speak()dDog(A)cCat(B)make_noise(d)# 汪汪make_noise(c)# 喵喵3.2 鸭子类型 (Duck Typing)Python 是一种动态语言它并不严格要求继承体系。“如果它走起来像鸭子叫起来像鸭子那它就是鸭子。”哪怕一个类没有继承Animal只要它也有speak()方法上面的make_noise函数照样能处理它。classCar:defspeak(self):print(滴滴)carCar()make_noise(car)# 滴滴 (Python 不检查类型只检查有没有这个方法)四、实战练习练习1工资管理系统 (继承与多态)定义父类Employee属性name方法get_pay()。定义子类FullTimeEmployee属性salary(月薪)重写get_pay()返回月薪。定义子类PartTimeEmployee属性hours,rate(时薪)重写get_pay()返回hours * rate。编写一个函数计算公司所有员工的总工资。classEmployee:def__init__(self,name):self.namenamedefget_pay(self):return0classFullTimeEmployee(Employee):def__init__(self,name,salary):super().__init__(name)self.salarysalarydefget_pay(self):returnself.salaryclassPartTimeEmployee(Employee):def__init__(self,name,hours,rate):super().__init__(name)self.hourshours self.rateratedefget_pay(self):returnself.hours*self.rate# 统计总支出staffs[FullTimeEmployee(Alice,6000),FullTimeEmployee(Bob,8000),PartTimeEmployee(Charlie,50,20)# 50小时 * 20元 1000]total_paysum(emp.get_pay()forempinstaffs)print(f公司本月总工资支出:{total_pay})# 15000五、OOP 类图结构我们可以用 Mermaid 来直观地展示继承关系。继承继承Animalnameeat()sleep()Dogbark()Catmeow()六、常见问题Q1私有方法怎么定义和属性一样方法名前加双下划线。例如def __secret_method(self):只能在类内部被self.__secret_method()调用。Q2Python 支持多继承吗支持。class C(A, B):表示 C 同时继承 A 和 B。但这会带来复杂性如菱形继承问题初学者建议先掌握单继承。Q3isinstance是什么用来判断对象是否属于某个类。dDog(A)print(isinstance(d,Dog))# Trueprint(isinstance(d,Animal))# True (因为Dog继承Animal)print(isinstance(d,Cat))# False七、小结OOP 三大特性封装 Encapsulation继承 Inheritance多态 Polymorphism私有属性 __attr公开方法访问class Child(Parent)代码复用super() 调用父类同名方法不同实现鸭子类型关键要点封装用__隐藏内部细节提供安全接口。继承子类自动拥有父类的功能super()是连接父子的桥梁。多态让代码更灵活关注点从是什么类型转变为能做什么。八、课后作业图形计算器定义父类Shape有一个方法area()返回 0。定义子类Circle(属性半径) 和Square(属性边长)。分别重写area()方法。创建一个列表包含不同的图形遍历打印它们的面积。游戏角色定义Hero类包含hp(血量) 和attack()方法。定义Mage(法师) 和Warrior(战士) 继承Hero。法师攻击时打印释放火球战士攻击时打印挥舞大剑。尝试给法师增加一个mp(魔法值) 属性并在攻击时消耗魔法。下节预告Day 16面向对象编程(OOP)下篇 - 魔术方法与类属性-__str__是什么__add__是什么静态方法又是什么明天我们将探索类的更多高级玩法系列导航上一篇Day 14 - 面向对象编程(上)下一篇Day 16 - 面向对象编程(下)待更新

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询