Python 多态理解

**

什么是多态?

**
多态顾名思义多种状态,在python中,不同对象调用同一个接口,表现出不同的状态,称为多态

class Duck():
    def who(self):
        print("I am a duck")

class Dog():
    def who(self):
        print("I am a dog")

class Cat():
    def who(self):
        print("I am a cat")
if __name__ == "__main__":
    duck=Duck()
    dog=Dog()
    cat=Cat()
    duck.who()
    dog.who()
    cat.who()

输出结果:

I am a duck
I am a dog
I am a cat

以上代码是多态吗?虽然不同的对象调用同一个接口表现出不同状态,但是!!这不是多态!
要实现多态有两个前提:

1.继承:多态必须发生在父类与子类之间

2.重写:子类重写父类方法

把以上代码进行修改,使之继承父类,才实现多态,如下:

class Animal():
    def who(self):
        print("I am an Animal")
class Duck(Animal):
    def who(self):
        print("I am a duck")

class Dog(Animal):
    def who(self):
        print("I am a dog")

class Cat(Animal):
    def who(self):
        print("I am a cat")
if __name__ == "__main__":
    duck=Duck()
    dog=Dog()
    cat=Cat()
    duck.who()
    dog.who()
    cat.who()

多态有什么用?

其实以上代码实际貌似没啥用,为什么一定要去定义通过同一个函数名?我定义who1,who2,who3不可以吗?代码量也一样啊!

其实真正体验出多态好处的代码一般是这样写的

class Animal():
    def who(self):
        print("I am an Animal")
class Duck(Animal):
    def who(self):
        print("I am a duck")

class Dog(Animal):
    def who(self):
        print("I am a dog")

class Cat(Animal):
    def who(self):
        print("I am a cat")

def func(obj):
    obj.who()

if __name__ == "__main__":
    duck=Duck()
    dog=Dog()
    cat=Cat()
    func(duck)
    func(dog)
    func(cat)

仅仅需要一个函数,就可以把不同对象的who函数表现出来了。这就增加了程序的灵活性,以不变应万变,不管你类中的who()写得如何得天花乱坠,我都可以用一个统一的形式来调用。另外,它增加了程序的可扩展性,不管是我们或者调用者,如果想增加新的功能,都不需要修改原来的代码。

例如,我想新增一个bird类,仅需增加以下代码,无需修改原来的。

class Bird(Animal):
    def who(self):
        print("I am a bird")

对于调用者,也仅需增加以下代码,无需修改原来的。

bird=Bird()
func(bird)

多态的好处:一是增加程序的灵活性,二是增加程序的可扩展性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python多态是通过继承和方法重写来实现的。在Python,可以定义一个基类,然后派生出多个子类,每个子类都可以重写基类的方法,从而实现多态性。 多态的概念是应用于Java和C#这一类强类型语言,而Python则采用了"鸭子类型"的方式,即只要一个对象具有特定的方法或属性,就可以当作相应类型的对象使用。这使得Python多态实现更加灵活。 举个例子来说,假设有一个动物类Animal,它有一个方法func。然后派生出猫类Cat和狗类Dog,它们分别重写了func方法。此时,我们可以通过调用func方法来实现多态。无论传入的是一个Animal对象、Cat对象还是Dog对象,都可以调用相应的func方法。 在Python多态的实现并没有严格的类型限制,因为Python函数的参数并没有类型限制。但是通过继承和方法重写,我们仍然可以实现类似于多态的效果。 请参考下面的示例代码来理解Python多态的实现: ```python class Animal: def func(self): print('动物发出了声音') class Cat(Animal): def func(self): print('喵 喵 喵') class Dog(Animal): def func(self): print('汪 汪 汪') def work(animal): animal.func() work(Animal()) # 输出:"动物发出了声音" work(Cat()) # 输出:"喵 喵 喵" work(Dog()) # 输出:"汪 汪 汪" ``` 在上面的示例,我们定义了一个work函数,它接受一个参数animal。无论传入的是Animal对象、Cat对象还是Dog对象,都可以调用相应的func方法,实现了多态的效果。 需要注意的是,Python多态并没有严格的类型检查,所以在编写代码时需要注意传入的参数是否具有相应的方法或属性。 希望这个例子可以帮助你理解Python多态的实现原理。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值