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

作者: james_chang | 来源:发表于2018-02-05 14:23 被阅读18次

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

    目的:接口的重(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()
    
    

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

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



    写了一个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(具体请戳静态方法,类方法,属性方法)


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

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

    转载请注明出处

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

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/yfdezxtx.html