当前位置: 移动技术网 > IT编程>脚本编程>Python > 类的多态与多态性

类的多态与多态性

2019年06月08日  | 移动技术网IT编程  | 我要评论

值得一看的美剧,8090视频,石家庄贴吧

目录

什么是多态

  • 多态指的是同一种事物的多种形态

    • 水--》冰、水蒸气、液态水

    • 动物--》人、狗、猪

93-类的多态与多态性-2水的三种形态.jpg

为什么用多态

  • 多态性:

    • 继承同一个类的多个子类中有相同的方法名

    • 那么子类产生的对象就可以不用考虑具体的类型而直接调用功能

多态的应用

  • animal()--》强调:父类是用来指定标准的,不能被实例化,也就是说父类中被@abc.abstractmethod装饰的方法,子类必须也要有,如果没有的话则会报错,这个拥有被装饰的方法的类称为抽象类

  • 由于动物都有叫,如果人的叫使用speak();狗的叫使用talk();猪的叫用jiao(),也就是说对于不同的动物有不同的叫方法,那么对于使用者来说,使用起来非常麻烦。因此我们可以规定人、狗、猪的叫都是speak(),那么我们以后使用某个动物叫的方法,只需要调用speak即可

93-类的多态与多态性-2狗叫.jpg

import abc


class animal(metaclass=abc.abcmeta):
    @abc.abstractmethod
    def speak(self):
        print('11111')

    @abc.abstractmethod
    def eat(self):
        pass


class people(animal):
    def speak(self):
        print('say hello')

    def eat(self):
        pass


class dog(animal):
    def speak(self):
        print('汪汪汪')

    def eat(self):
        pass


class pig(animal):
    def speak(self):
        print('哼哼哼')

    def eat(self):
        pass


peo1 = people()
dog1 = dog()
pig1 = pig()
peo1.speak()
say hello
dog1.speak()
汪汪汪
pig1.speak()
哼哼哼
def my_speak(animal):
    animal.speak()


my_speak(peo1)
say hello
my_speak(dog1)
汪汪汪
my_speak(pig1)
哼哼哼

数据类型中多态的应用

  • 其实我们一直在使用多态,列表、元组、字符串的len()方法其实就是一种多态的应用,我们不需要关心len()的数据类型,我们只需要记住如果需要求一个容器类型的长度,使用len()的方法就行
l = [1, 2, 3]
s = 'helllo'
t = (1, 2, 3)

print(l.__len__())
print(s.__len__())
print(t.__len__())

# 列表、字符串、元组规定了计算这些数据类型的长度就必须使用len()方法
# def len(obj):
#     return obj.__len__()
3
6
3
print(len(l))  # l.__len__()
print(len(s))  # s.__size__()
print(len(t))  # t.__width__()
3
6
3

鸭子类型

  • python推崇的是鸭子类型,只要你叫的声音像鸭子,并且你走路的样子也像鸭子,那你就是鸭子

93-类的多态与多态性-2鸭.jpg

  • linux中一切皆文件,只要我们规定硬盘、进程、文件都是文件,都拥有读read()写write()方法,那我们就没必要定义一个抽象文件类,更没必要使用@abc.abstractmethod装饰器规定文件需要拥有这些方法,因为这不符合python的风格
class disk:
    """硬盘"""
    def read(self):
        print('disk read')

    def write(self):
        print('disk wirte')


class process:
    """进程"""
    def read(self):
        print('process read')

    def write(self):
        print('process wirte')


class file:
    """文件"""
    def read(self):
        print('file read')

    def write(self):
        print('file wirte')


obj1 = disk()
obj2 = process()
obj3 = file()

obj1.read()
obj1.write()
disk read
disk wirte

93-类的多态与多态性-2文件.jpg

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网