Python: ejemplos de muchas aplicaciones orientadas a objetos

Requisito: Imprima el siguiente contenido para lograr la cooperación entre personas y diferentes perros.
Zhang San está trabajando.
Los perros guía están guiando a los ciegos.
Zhang San está trabajando.
Los perros detectores de drogas son antinarcóticos.
Zhang San está trabajando.
Los perros policía están trabajando.

Echemos un vistazo a cómo escribir de la manera estúpida primero.

class PoliceDog(object):
    def attack_enemy(self):
        print('警犬正在攻击人')

class BlindDog(object):
    def lead_road(self):
        print('导盲犬正在领路')

class DrugDog(object):
    def drug(self):
        print('缉毒犬正在缉毒')

class Person(object):
    def __init__(self,name):
        self.name = name

    def work_with_dg(self):
        print(self.name,'在工作')
        self.dog.attack_enemy()

    def work_with_bd(self):
        self.dog.lead_road()

    def work_with_dd(self):
        self.dog.drug()

pd = PoliceDog()
p = Person('张三')
p.dog = pd
p.work_with_dg()

bd = BlindDog()
p.dog = bd
p.work_with_bd() # 每加一个狗都需要重新定义一个方法

dd = DrugDog()
p.dog = dd
p.work_with_dd() # 每加一个狗都需要重新定义一个方法

Desventajas: cada perro adicional necesita definir el método correspondiente en la clase Person, el código es redundante y la tasa de repetición es alta

Utilice el código optimizado de Duo Tai:

# 狗父类
class Dog(object):
    def work(self):
        print('狗在工作')

# 狗子类
class BlindDog(Dog):
    def work(self):
        print('导盲犬正在导盲')

# 狗子类
class DrugDog(Dog):
    def work(self):
        print('缉毒犬正在缉毒')

# 狗子类
class PoliceDog(Dog):
    def work(self):
        print('警犬正在工作')

# 人类
class Person(object):
    def __init__(self, name):
        self.name = name

    def work_with_dog(self):
        print(self.name, '在工作')
        print('self.dog',self.dog)
        if self.dog is not None and isinstance(self.dog,Dog): #满足条件:self.dog不为None,且self.dog是由父类Dog实例化出来的(self.dog相当于狗子类)
            self.dog.work() # 相当于Blinddog().work/DrugDog().work/PoliceDog().work


# 实例对象
p = Person('张三')

bd = BlindDog()
p.dog = bd # Person类中增加狗的属性,使其等于狗的对象bd
p.work_with_dog()

dd = DrugDog()
p.dog = dd # Person类中增加狗的属性,使其等于狗的对象dd
p.work_with_dog()

pd = PoliceDog()
p.dog = pd # Person类中增加狗的属性,使其等于狗的对象pd
p.work_with_dog() 

Supongo que te gusta

Origin blog.csdn.net/weixin_42161670/article/details/113464545
Recomendado
Clasificación