Python3.x:面向对象的三大特性之多态

作用:一个接口,多种实现

目的:接口的重(chong)用

刚一开始可能会不理解,什么接口,怎么实现,下面我门就通过一个例子来看一下多态是怎么实现的

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


class Man(People):
    def walk(self):
        print('%s is walking' % self.name)


class Woman(People):
    def walk(self):
        print('%s is walking' % self.name)

def people_walk(obj):
    obj.walk()


man1 = Man('xiaoming')
man1.walk()
man2 = Woman('ruhua')
man2.walk()

Python3.x:面向对象的三大特性之多态_第1张图片

简单的三个类,两个子类都继承了父类People,父类中有构造函数初始化name变量,两个子类中都有一个walk函数,实例化了两个对象man1和man2,分别调用了walk函数,实现了输出这两句话

但是我们能不能写一个函数,当作一个接口,传入对象就可以执行walk函数,而不是用这个对象来调用walk函数呢?


Python3.x:面向对象的三大特性之多态_第2张图片

写了一个people_walk的函数,实现了这个接口,但是是写在类外,有没有可以优化的地方呢?

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

    @staticmethod
    def people_walk(obj):
        obj.walk()


class Man(People):
    def walk(self):
        print('%s is walking' % self.name)


class Woman(People):
    def walk(self):
        print('%s is walking' % self.name)


# def people_walk(obj):
#     obj.walk()


man1 = Man('xiaoming')
# man1.walk()
man2 = Woman('ruhua')
# man2.walk()


People.people_walk(man1)
People.people_walk(man2)

我们把people_walk函数移到了父类中,并且用了一个类似装饰器的东西@staticmethod(具体请戳静态方法,类方法,属性方法)

Python3.x:面向对象的三大特性之多态_第3张图片

看,walk函数有了一个共同的接口: People.people_walk()想让谁走就把谁传进去就行了

这样,我们就实现了一个接口,多种实现

转载请注明出处

python自学技术互助扣扣群:670402334

你可能感兴趣的:(Python3.x:面向对象的三大特性之多态)