面向对象的多态、多态性

释放双眼,带上耳机,听听看~!

多态

       多态指的是一类事物有多种形态,比如水有多种形态:冰、水、水蒸气,但都是H2O,下面定义一个H2O的父类和三种形态的子类:

class H2O:
    def __init__(self,name,temperature):
        self.name = name
        self.temperature = temperature

    def turn(self):
        if self.temperature <= 0:
            print(\'温度太低,变成%s了\'%self.name)
        elif self.temperature >0 and self.temperature <100:
            print(\'温度适中,变成%s了\'%self.name)
        else:
            print(\'温度太高变成%s了\'%self.name)

class Ice(H2O):
    pass

class Water(H2O):
    pass

class Air(H2O):
    pass

多态性

        多态性就是在不考虑实例类型的情况下使用实例,举个例子,我们之前学过的一个内置函数len(),可以用于字符串,也可以用于列表和元组:

s=str(\'cjeowjo\')
l=list([1,2,3])
t=tuple((4,5,6))

#我们可以在不考虑三者类型的前提下使用s,l,t
s.__len__()
l.__len__()
t.__len__()

#其实我们都是这样用的
len(s)
len(l)
len(t)

       其实字符串、列表和元组,是三个子类,他们有共同的父类type,实例化之后都可以调用父类的__len__()这个属性,但是定义一个len()函数后,使用就更灵活了。现在回到之前水的例子:

class H2O:
    def __init__(self,name,temperature):
        self.name = name
        self.temperature = temperature

    def turn(self):
        if self.temperature <= 0:
            print(\'温度太低,变成%s了\'%self.name)
        elif self.temperature >0 and self.temperature <100:
            print(\'温度适中,变成%s了\'%self.name)
        else:
            print(\'温度太高变成%s了\'%self.name)

class Ice(H2O):
    pass

class Water(H2O):
    pass

class Air(H2O):
    pass

i1 = Ice(\'\',-10)
w2 = Water(\'\',20)
a1 = Air(\'水蒸气\',120)

i1.turn()
w2.turn()
a1.turn()
>>>温度太低,变成冰了
>>>温度适中,变成水了
>>>温度太高变成水蒸气了

def func(obj):
    obj.turn()

func(i1)
func(w2)
func(a1)

>>>温度太低,变成冰了
>>>温度适中,变成水了
>>>温度太高变成水蒸气了

       结果是一样的,这个时候再多一种水的其他类,也可以直接用func函数了(当然,目前水就这三种形态,只是假设),可见多态的好处在于:

1.增加了程序的灵活性

  以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(obj)

2.增加了程序额可扩展性

  通过继承animal类创建了一个新的类,使用者无需更改自己的代码,还是用func(obj)去调用 

 

      

      

人已赞赏
随笔日记

阎庆民:证监会毫不动摇地推进资本市场健康发展 服务军工企业高质量发展

2020-11-9 4:02:31

随笔日记

git 入门教程之个性化 git

2020-11-9 4:02:33

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索