您的位置: 网站首页> python面向对象> 当前文章

什么是多态,统一函数接口实现多态

老董-我爱我家房产SEO2021-09-26168围观,141赞

  1、以强弱数据类型变量赋值来理解多态

  了解多态就可以从强类型语言和弱类型语言出发,如果只是学python可能不好理解,因为没有对比就无从无感受。学过C或者其他强类型语言的话就好理解。数据类型的概念可以查看编程语言为什么定义数据类型 

  1)强类型定义语言

  强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了,不能被赋值成其他类型。如果你定义了一个整型变量a=1,那么就不能再给a赋值成字符串。强类型定义语言是类型安全的语言。

  2)弱类型定义语言

  数据类型可以被忽略的语言。它与强类型定义语言相反,同一个变量可以赋不同数据类型的值。

  python是弱类型语言,对于弱类型的语言来说,变量并没有声明类型,因此同一个变量可以在不同的时间赋不同的值。当同一个变量在调用同一个方法时,完全可能呈现出多种行为(具体呈现出哪种行为由该变量所引用的对象来决定),这就是所谓的多态(Polymorphism)。

  2、以函数调用来理解多态

  定义1个函数,给这个函数的参数传递数值就打印数值,传递字符串就打印字符串。即在传参的时候不用考虑参数的数据类型,这个也是多态。(如果是强类型语言,那么函数的参数是规定了数据类型的,传参的时候要符合参数的数据类型,传数值就只能传数值)。

# ‐*‐ coding: utf‐8 ‐*‐

def print_info(arg):
    print(arg,type(arg))

print_info("字符串")
print_info(123)
字符串 <class 'str'>
123 <class 'int'>

  3、统一函数接口实现多态

  同1个函数能触发不同的类做出不同的响应,就是多态性的应用实例,下面通过统一函数接口实现了多态,my_open函数接受不同的对象,这些对象内部都实现了1个open方法。只要有1个对象内部有open方法就可以作为参数传给my_open,而不用考虑这个对象到底是什么类。

# -*- coding: utf-8 -*-

class Baidu(object):
    def open(self):
        print("访问百度.....")

class Google(object):
    def open(self):
        print("访问谷歌.....")

def my_open(obj_type):
    """统一调用接口"""
    obj_type.open()


if __name__ == "__main__":
    baidu_obj = Baidu()
    google_obj = Google()
    my_open(baidu_obj)
    my_open(google_obj)

访问百度.....
访问谷歌.....

  上述只要有1个对象内部有open方法就可以作为参数传给my_open,而不用考虑这个对象到底是什么类。这在开发中可以规范大家的行为,比如有mysql和clickhouse这2个数据库操作类,规定统一用connect方法连接库,这样不管是新人还是老人都可以方便的使用维护代码,因为事先约定好了只要拿到对象就可以connect。具体如何去约束如何去规范可以看下一篇文章!

很赞哦!

python编程网提示:转载请注明来源www.python66.com。
有宝贵意见可添加站长微信(底部),获取技术资料请到公众号(底部)。同行交流请加群 python学习会

文章评论

    什么是多态,统一函数接口实现多态文章写得不错,值得赞赏

站点信息

  • 网站程序:Laravel
  • 客服微信:a772483200