我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 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 = name self.age = age def __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 = name self.age = age self.pets = pets def __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 = name self.age = age def __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 = name self.age = age def __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 = name self.age = age self.pets = pets def __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 = name self.age = age def __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 = name self.age = age def __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 = name self.age = age def 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 = pets def __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()