zoukankan      html  css  js  c++  java
  • Python 面向对象三大特性-多态

    # 鸭子类型

      Python崇尚鸭子类型,即‘如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子’, Golang也有Duck Type的概念。

    #

      封装可以隐藏实现细节,使得代码模块化;

      继承可以扩展已存在的代码模块(类);

      而多态则是为了实现另一个目的 — 接口重用(一个接口多种实现)!

    # 实现方法

    1、定义函数实现 

    class A(object):
    
        def __init__(self, name):
            self.name = name
    
        def say(self):    # 有 print 方法
            print("I Love: " + self.name)
    
    
    class B(object):
    
        def __init__(self, name):
            self.name = name
    
        def say(self):  # 有 print 方法
            print("I Love Love Love: " + self.name)
    
    
    def func(obj):
        obj.say()   # 多态接口,只要对象有say()方法 就是鸭子类型。
    
    
    if __name__ == '__main__':
        a = A("Python") 
        b = B("Python")
    
        func(a)
        func(b)

    2、定义类实现

    class A(object):
    
        def __init__(self, name):
            self.name = name
    
        def say(self): 
            print("I Love: " + self.name)
    
    
    class B(object):
    
        def __init__(self, name):
            self.name = name
    
        def say(self):
            print("I Love Love Love: " + self.name)
    
    
    class Func(object):
    
        def __init__(self, obj):
            self.obj = obj
    
        def func(self):
            self.obj.say()   # 多态接口,只要对象有say()方法 就是鸭子类型。
    
    
    if __name__ == '__main__':
        a = A("Python")
        b = B("Python")
    
        Func(a).func()
        Func(b).func()

    3、数组实现

    class A(object):
    
        def __init__(self, name):
            self.name = name
    
        def say(self):
            print("I Love: " + self.name)
    
    
    class B(object):
    
        def __init__(self, name):
            self.name = name
    
        def say(self):
            print("I Love Love Love: " + self.name)
    
    
    if __name__ == '__main__':
        a = A("Python")
        b = B("Python")
    
        for obj in [a, b]:
            obj.say()

      

  • 相关阅读:
    用Python获取Linux资源信息的三种方法
    对python中元类的理解
    一道有趣的和编程无关的编程题思考
    Python编程进阶
    函数计算的 Python手册小问题
    Linux 命令
    pyechart
    KV数据库Redis
    微博API 学习记录
    非阻塞式的 requests.post 学习
  • 原文地址:https://www.cnblogs.com/vincenshen/p/6078078.html
Copyright © 2011-2022 走看看