Py学习  »  Python

在python中使用组合而不是继承的多态性的正确方法

Enzo • 5 年前 • 1586 次点击  

在做一个项目时,我在使用继承时陷入了设计中。现在我试着去掉它,改为使用构图,因为这似乎是解决我问题的合适方法。然而,我需要多动症,我不确定我是否以正确的方式实现了我的作文。

有人能看看我下面的代码吗?在最后三行中,我希望所有的动物都能行走,但前提是它们有能力行走。在对该属性调用函数之前,首先检查对象是否具有某个属性(在本例中为“legs”)是一种好的做法吗?我只是好奇这是一个正确的方式来做这件事还是有更好的方式。

class Animal:

    def __init__(self, name):
        self.name = name

    def make_sound(self):
        print("silence...")


class Wings:

    def flap(self):
        print("Wings are flapping")


class Legs:

    def walk(self):
        print("Legs are walking")


class Bird:

    def __init__(self):
        self.animal = Animal("Bird")
        self.wings = Wings()

    def make_sound(self):
        print(f"{self.animal.name} is Singing!")


class Dog:

    def __init__(self):
        self.animal = Animal("Dog")
        self.legs = Legs()

    def make_sound(self):
        print(f"{self.animal.name} is Barking")


class Cat:

    def __init__(self):
        self.animal = Animal("Cat")
        self.legs = Legs()

    def make_sound(self):
        print(f"{self.animal.name} is Meowing!")


if __name__ == '__main__':

    animals = list()

    animals.append(Bird())
    animals.append(Dog())
    animals.append(Cat())

    for animal in animals:
        animal.make_sound()

    for animal in animals:
        if hasattr(animal, 'legs'):
            animal.legs.walk()
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40916
 
1586 次点击  
文章 [ 1 ]  |  最新文章 5 年前