由参数传递实现的python多态

本文通过Python实现了一个抽象的动物类及其子类,展示了如何通过参数传递实现多态,具体应用在动物进食方法上。通过创建不同的动物实例并调用统一的喂食方法,实现了对不同动物进食行为的抽象和复用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以动物吃东西为例子,讲述由python实现的参数传递实现的多态


#实现一个父类,虚构的动物类,并实现一个空的Eat方法
class Animal(object):
    def __init__(self):
        pass
    def Eat(self):
        pass

class Chicken(Animal):
    def __init__(self):
        super(Chicken, self).__init__()
    def Eat(self):
        print 'the chicken has been eat'

class Dog(Animal):
    def __init__(self):
        super(Dog, self).__init__()
    def Eat(self):
        print 'the dog has been eat'

#实现一个调用的方法,这里也用类来实现吧
class Person(object):
    def __init__(self,name):
        self.name = name
    def Feed(self, ped):
        ped.Eat()

if __name__ == '__main__':
    Kobe = Person('Kobe')#给调用者取个名字吧
    pedChicken = Chicken()#建立一个小鸡宠物
    pedDog = Dog()#建立一个小狗宠物
    Kobe.Feed(PedChicken)#Feed方法根据传入的参数不同调用
    Kobe.Feed(pedDog)

这样就形成了,Feed方法不关心Eat方法实现的细节,只需要通过参数来确定调用哪个方法。这只是python实现多态的一种
这里用到了super,其实在这里例子中没什么用处,只是用来说明子类如何调用父类的方法
Dog类的init方法可以如下实现
def __init__(self):
    Animal.__init__(self)
这样也可以,不过多数用super的方法好一点,因为这样至少子类和父类耦合没那么高,把父类的名字写到子类里面毕竟不是什么好事

本文出自 “只想简单” 博客,请务必保留此出处http://gmingzhe.blog.51cto.com/810664/163169

### Python 多态性概述 多态性是面向对象编程的重要特性之一,允许程序使用不同类型的对象执行相同的操作。这种灵活性使得代码更加通用和易于扩展。 #### 实现机制 在Python中,多态性主要通过继承和方法重写来实现[^1]。父类定义了一般的行为模式,而子类可以根据具体需求重新定义这些行为。这样,在运行时可以动态决定调用哪个版本的方法。 #### 示例解析 考虑如下场景:有一个`Animal`基类以及两个派生类`Dog`和`Cat`。每个动物都有自己的叫声特征: ```python class Animal: def speak(self): pass class Dog(Animal): def speak(self): return "Woof!" class Cat(Animal): def speak(self): return "Meow!" ``` 这里定义了一个名为 `speak()` 的抽象方法作为接口声明于 `Animal` 类内;接着分别由 `Dog` 及 `Cat` 继承并实现了各自的发声逻辑[^3]。 为了展示如何利用多态性简化代码结构,下面编写一个辅助函数用于发出指定动物的声音: ```python def animal_sound(animal: Animal) -> str: return f"The {type(animal).__name__} says: {animal.speak()}" ``` 此函数接收任意一种基于 `Animal` 创建出来的实体参数,并能够依据实际传递过来的具体类型自动匹配对应的动作响应——即调用了相应子类里覆写的那个特定版次的 `speak()` 方法[^2]。 现在测试这段代码的效果: ```python if __name__ == "__main__": dog = Dog() cat = Cat() print(animal_sound(dog)) # 输出:"The Dog says: Woof!" print(animal_sound(cat)) # 输出:"The Cat says: Meow!" ``` 上述例子清晰展示了Python多态性的强大之处及其简洁优雅的应用方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值