我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈
虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈
PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈
Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈
优 质 资 源 下 载 :👉👉 资源下载合集 👈👈
三大特性综合案例1
- 三大特性综合案例1
- 案例要求
- 怎样通过代码解决问题
- 代码实现
三大特性综合案例1
案例要求
# 定义三个类:小狗、小猫、人
# 小狗:# 姓名、年龄(默认1岁)# 吃饭、玩、睡觉、看家 (格式:名字是xx,年龄xx岁的小狗在xx)
# 小猫:# 姓名、年龄(默认1岁)# 吃饭、玩、睡觉、捉老鼠 (格式:名字是xx,年龄xx岁的小猫在xx)
# 人:# 姓名、年龄(默认1岁)、宠物# 吃饭、玩、睡觉 (格式:名字是xx,年龄xx岁的小猫在xx)# 养宠物(让所有的宠物吃饭、玩、睡觉)# 让宠物工作(让所有的宠物根据自己的职责开始工作)
怎样通过代码解决问题
- 1、有开发经验的
- 根据自己的开发经验,制定出一套自以为完美的解决方案,通过代码实现这个方案
- 2、无开发经验的
- 有进取心的:提出问题 —— 直接通过代码实现能够想到的问题,检测发现代码问题,重构代码,不断的去升级方案
- 无进取心的:提出问题 —— 直接通过代码实现能够想到的问题
代码实现
- 第一版:首先实现Dog类
class Dog:def __init__(self, name, age=1):self.name = nameself.age = agedef __str__(self):return f'名字是{self.name}, 年龄{self.age}岁的小狗正在'def eat(self):print(f'{self}吃饭...')def play(self):print(f'{self}玩耍...')def sleep(self):print(f'{self}睡觉...')def watch(self):print(f'{self}看家...')d = Dog('小黑') d.eat()
- 第二版:实现Cat类和Person类(基本与Dog类一致,可以直接复制修改即可)
class Person:def __init__(self, name, pets, age=1):self.name = nameself.age = ageself.pets = petsdef __str__(self):return f'名字是{self.name}, 年龄{self.age}岁,正在'def eat(self):print(f'{self}吃饭...')def play(self):print(f'{self}玩耍...')def sleep(self):print(f'{self}睡觉...')def yangPets(self):for pet in self.pets:pet.eat()pet.play()pet.sleep()def pets_work(self):for pet in self.pets:if isinstance(pet, Dog):pet.watch()elif isinstance(pet, Cat):pet.catch()class Cat:def __init__(self, name, age=1):self.name = nameself.age = agedef __str__(self):return f'名字是{self.name}, 年龄{self.age}岁的小猫正在'def eat(self):print(f'{self}吃饭...')def play(self):print(f'{self}玩耍...')def sleep(self):print(f'{self}睡觉...')def catch(self):print(f'{self}捉老鼠...')class Dog:def __init__(self, name, age=1):self.name = nameself.age = agedef __str__(self):return f'名字是{self.name}, 年龄{self.age}岁的小狗正在'def eat(self):print(f'{self}吃饭...')def play(self):print(f'{self}玩耍...')def sleep(self):print(f'{self}睡觉...')def watch(self):print(f'{self}看家...')d = Dog('小黑') d.eat()
- 第三版:在这里就发现了问题,两种动物的工作方法用了两种不同的方法名称,所以在人类中调用的时候需要判断类型,再根据类型调用不同的方法,后续再增加新的动物,那就需要再增加更多的判断。
- 解决方法:我们可以把所有动物工作的方法名进行统一,后续在调用工作的方法的时候就不需要再进行判断了
class Person:def __init__(self, name, pets, age=1):self.name = nameself.age = ageself.pets = petsdef __str__(self):return f'名字是{self.name}, 年龄{self.age}岁,正在'def eat(self):print(f'{self}吃饭...')def play(self):print(f'{self}玩耍...')def sleep(self):print(f'{self}睡觉...')def yangPets(self):for pet in self.pets:pet.eat()pet.play()pet.sleep()def pets_work(self):for pet in self.pets:pet.work()class Cat:def __init__(self, name, age=1):self.name = nameself.age = agedef __str__(self):return f'名字是{self.name}, 年龄{self.age}岁的小猫正在'def eat(self):print(f'{self}吃饭...')def play(self):print(f'{self}玩耍...')def sleep(self):print(f'{self}睡觉...')def work(self):print(f'{self}捉老鼠...')class Dog:def __init__(self, name, age=1):self.name = nameself.age = agedef __str__(self):return f'名字是{self.name}, 年龄{self.age}岁的小狗正在'def eat(self):print(f'{self}吃饭...')def play(self):print(f'{self}玩耍...')def sleep(self):print(f'{self}睡觉...')def work(self):print(f'{self}看家...')d = Dog('小黑') d.eat()
- 第四版:在上面的代码中可以发现有很多相同的部分,造成了大量的冗余代码,比如吃饭、睡觉、玩耍这些方法,在三个类中都写了一遍…
- 解决方案:我们可以将这些共有的特性提取出来封装到一个父类中,然后这些具体的类都继承这个父类就可以了
class Animall:def __init__(self, name, age=1):self.name = nameself.age = agedef eat(self):print(f'{self}吃饭...')def play(self):print(f'{self}玩耍...')def sleep(self):print(f'{self}睡觉...')class Person(Animall):def __init__(self, name, pets, age=1):super(Person, self).__init__(name, age)self.pets = petsdef __str__(self):return f'名字是{self.name}, 年龄{self.age}岁,正在'def yangPets(self):for pet in self.pets:pet.eat()pet.play()pet.sleep()print('')def pets_work(self):for pet in self.pets:pet.work()class Cat(Animall):def __str__(self):return f'名字是{self.name}, 年龄{self.age}岁的小猫正在'def work(self):print(f'{self}捉老鼠...')class Dog(Animall):def __str__(self):return f'名字是{self.name}, 年龄{self.age}岁的小狗正在'def work(self):print(f'{self}看家...')d1 = Dog('小黑') d2 = Dog('小黄') c1 = Cat('小花') c2 = Cat('小白')p = Person('失心疯',[d1, d2, c1, c2], 36) # p.pets_work() p.yangPets()