Python中的多态的理解

Python中的多态

类具有继承关系,子类类型可以向上转型看做是父类类型

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

    def speak(self):
        print("animal is speaking")

class Dog(Animal):
    def __init__(self,name):
        self.name = name

    def speak(self):
        print("dog is speaking")


class Duck(Animal):
    def __init__(self,name):
        self.name = name

d = Dog("dog1")
print(type(d))  #结果<class '__main__.Dog'>
print(isinstance(d,Animal)) # 返回结果为true,所以在Python中子类也可以认为是父类类型

def talk(x):
    x.speak()
an = Animal("animal")
talk(an)
dog = Dog("dog")
talk(dog)
duck = Duck("duck")
talk(duck)
“”“
在调用talk()的时候,无论x是Animal,Dog还是Duck,都可以正确执行.Animal,和Dog会调用自己的speak方法,二Duck自己没有定义spaek方法则会顺着继承链一直向上找speak方法,直到找到为止。
”“”
结果
animal  is speaking
dog  is speaking
animal  is speaking

# 由于Python是动态语言,所以即使传递给x的参数即使不是animal的子类,只要该实例存在speak方法,也是可行的

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

    def speak(self):
        print("person is speaking")
p = Person("xiaoming")
talk(p)
结果:person is speaking 

这就是动态语言和静态语言(JAVA)的区别,在Python中,不会检查类型,只要方法名和参数正确,就可以调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值