老生常谈python中的重载

在一些静态语言中,大都存在有一个重载的概念。这是在OOP(面对对象编程)中一个必不可少的一个行为。

所谓重载,就是多个相同函数名的函数,根据传入的参数个数,参数类型而执行不同的功能。所以函数重载实质上是为了解决编程中参数可变不统一的问题。

python 中的重载

  在python中,具有重载的思想却没有重载的概念。所以有的人说python这么语言并不支持函数重载,有的人说python具有重载功能。实际上python编程中具有重载的目的缺无重载的行为,或者说是python并不需要重载!

  python是一门动态语言,不需要声明变量类型,函数中可以接受任何类型的参数也就无法根据参数类型来支持重载,python没有必要去考虑参数的类型问题,这些都可以在函数内部判断处理,并无必要去在写一个函数。python 有多种传参方式,默认参数/可变参数/可变关键字参数可以处理函数参数中参数可变的问题。

python3.4中增加的重载机制

如果你不用重载就会浑身难受的话

那么在python3.4中提供有一个转发机制来实现重载

from functools import singledispatch
@singledispatch
def function(obj):
  print('%r'%(obj))
@function.register(int)
def function_int(obj):
  print('Integer: %d'%(obj))
@function.register(str)
def function_int(obj):
  print('String: %s'%(obj))
@function.register(list)
def function_list(obj):
  print('List: %r'%(obj))
if __name__ == "__main__":
   function(1)
   function('hello')
   function(range(3))
   function(object) 

总结

以上所述是小编给大家介绍的python中的重载,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

(0)

相关推荐

  • 用Python实现服务器中只重载被修改的进程的方法

    现在,我们已经把一个Web App的框架完全搭建好了,从后端的API到前端的MVVM,流程已经跑通了. 在继续工作前,注意到每次修改Python代码,都必须在命令行先Ctrl-C停止服务器,再重启,改动才能生效. 在开发阶段,每天都要修改.保存几十次代码,每次保存都手动来这么一下非常麻烦,严重地降低了我们的开发效率.有没有办法让服务器检测到代码修改后自动重新加载呢? Django的开发环境在Debug模式下就可以做到自动重新加载,如果我们编写的服务器也能实现这个功能,就能大大提升开发效率. 可惜

  • python 运算符 供重载参考

    二元运算符 特殊方法 + __add__,__radd__ - __sub__,__rsub__ * __mul__,__rmul__ / __div__,__rdiv__,__truediv__,__rtruediv__ // __floordiv__,__rfloordiv__ % __mod__,__rmod__ ** __pow__,__rpow__ << __lshift__,__rlshift__ >> __rshift__,__rrshift__ & __an

  • Python正确重载运算符的方法示例详解

    前言 说到运算符重载相信大家都不陌生,运算符重载的作用是让用户定义的对象使用中缀运算符(如 + 和 |)或一元运算符(如 - 和 ~).说得宽泛一些,在 Python 中,函数调用(()).属性访问(.)和元素访问 / 切片([])也是运算符. 我们为 Vector 类简略实现了几个运算符.__add__ 和 __mul__ 方法是为了展示如何使用特殊方法重载运算符,不过有些小问题被我们忽视了.此外,我们定义的Vector2d.__eq__ 方法认为 Vector(3, 4) == [3, 4]

  • Python基类函数的重载与调用实例分析

    本文实例讲述了Python基类函数的重载与调用方法.分享给大家供大家参考.具体分析如下: 刚接触Python语言的时间不长,对于这个语言的很多特性并不是很了解,有很多用法都是还不知道.今天想着写一个Python面向对象编程时的继承中的函数调用.分享出来,一起进步. 因为之前接触过Java和C++,所有对于面向对象的思想也早已经很熟析的了.这里也不再对面向对象是什么进行赘述了.我们直接上代码吧!看看对于继承和基类函数的调用在Python中是如何调用的- 首先,是基类文件base.py 复制代码 代

  • Python运算符重载用法实例分析

    本文实例讲述了Python运算符重载用法.分享给大家供大家参考.具体如下: 在Python语言中提供了类似于C++的运算符重在功能: 一下为Python运算符重在调用的方法如下: Method         Overloads         Call for __init__        构造函数         X=Class() __del__         析构函数         对象销毁 __add__         +                 X+Y,X+=Y __

  • Python运算符重载用法实例

    本文实例讲述了Python运算符重载用法.分享给大家供大家参考.具体分析如下: python中,我们在定义类的时候,可以通过实现一些函数来实现重载运算符. 例子如下: # -*- coding:utf-8 -*- ''''' Created on 2013-3-21 @author: naughty ''' class Test(object): def __init__(self, value): self.value = value def __add__(self, x): return

  • 老生常谈python中的重载

    在一些静态语言中,大都存在有一个重载的概念.这是在OOP(面对对象编程)中一个必不可少的一个行为. 所谓重载,就是多个相同函数名的函数,根据传入的参数个数,参数类型而执行不同的功能.所以函数重载实质上是为了解决编程中参数可变不统一的问题. python 中的重载   在python中,具有重载的思想却没有重载的概念.所以有的人说python这么语言并不支持函数重载,有的人说python具有重载功能.实际上python编程中具有重载的目的缺无重载的行为,或者说是python并不需要重载!   py

  • Python中操作符重载用法分析

    本文实例讲述了Python中操作符重载用法.分享给大家供大家参考,具体如下: 类可以重载python的操作符 操作符重载使我们的对象与内置的一样.__X__的名字的方法是特殊的挂钩(hook),python通过这种特殊的命名来拦截操作符,以实现重载. python在计算操作符时会自动调用这样的方法,例如: 如果对象继承了__add__方法,当它出现在+表达式中时会调用这个方法.通过重载,用户定义的对象就像内置的一样. 在类中重载操作符 1.操作符重载使得类能拦截标准的python操作. 2.类可

  • python中reload重载实例用法

    当我们想对python中原有的模块进行覆盖,又不希望退出当前的程序,就需要用到重载的概念.这样既能使模块得到更新,又不影响解释器的使用.在导入的模块上,也是对之前原有模块的一次覆盖,包括最初导入时所加载的各种过程.下面我们学习reload的一些基础内容,在实例中体会加载功能. 1.装载MyModule语法演示: from imp import reload reload(MyModule) 2.参数 module -- 模块对象. 3.返回值 返回模块对象. 4.实例 当前目录下有一个test.

  • 老生常谈Python中的Pickle库

    目录 简介 pickle与json比较 函数 dumps loads dump load 简介 Python 中有个序列化过程叫作 pickle,它能够实现任意对象与文本之间的相互转化,也可以实现任意对象与二进制之间的相互转化.也就是说,pickle 可以实现 Python 对象的存储及恢复. pickle与json比较 pickle协议和JSON  (JavaScript对象表示法)之间有基本的区别:        JSON是一种文本序列化格式(它输出unicode文本,尽管大多数时候它被编码

  • 关于python中模块和重载的问题

    模块和重载 简单来讲,任意一个以.py结尾的python文件都是一个模块.例如有A.py和B.py两个文件.在A中可以通过导入B来读取B模块定义的内容,导入操作本质上就是载入另一个文件. 基于模块的模型是python程序架构背后的核心思想. 一个大型python程序往往以多个模块文件的形式出现,并且从其它模块导入工具.但是通常会指定一个模块文件作为主文件(也叫顶层文件),该文件启动之后,就会运行整个程序.除了顶层文件之外的其他文件都是导入模块. 导入操作将会导致模块中的代码被运行,因此导入文件也

  • 老生常谈python之鸭子类和多态

    一. 什么是多态 <1>一种类型具有多种类型的能力 <2>允许不同的对象对同一消息做出灵活的反应 <3>以一种通用的方式对待个使用的对象 <4>非动态语言必须通过继承和接口的方式来实现 二. python中的多态 <1>通过继承实现多态(子类可以作为父类来使用) <2>子类通过重载父类的方法实现多态 class Animal: def move(self): print('animal is moving....') class Do

  • 老生常谈python的私有公有属性(必看篇)

    python中,类内方法外的变量叫属性,类内方法内的变量叫字段.他们的私有公有访问方法类似. class C: __name="私有属性" def func(self): print(C.__name) class sub_C(C): def info(self): print(C.__name)#派生类中不可以访问父类的私有字段 obj=C() obj.func() obj=sub_C() obj.info() 方法.属性的访问于上述方式相似,即:私有成员只能在类内部使用 以上这篇老

  • 深入讲解Python中面向对象编程的相关知识

    Python从第一天开始就是面向对象的语言.正因为如此,创建和使用类和对象是非常地容易.本章将帮助您在使用Python面向对象编程的技术方面所有提高. 如果没有任何以往面向对象(OO)的编程的经验,那么可能要了解一些基本的入门课程就可以了,或者至少某种形式的教程,让你有了解基本概念. 但是,这里会比较少地介绍面向对象编程(OOP): OOP术语概述 类: 用户定义的原型对象,它定义了一套描述类的任何对象的属性.属性是数据成员(类变量和实例变量)和方法,通过点符号访问. 类变量:这是一个类的所有实

  • 详解Python中的__new__、__init__、__call__三个特殊方法

    __new__: 对象的创建,是一个静态方法,第一个参数是cls.(想想也是,不可能是self,对象还没创建,哪来的self) __init__ : 对象的初始化, 是一个实例方法,第一个参数是self. __call__ : 对象可call,注意不是类,是对象. 先有创建,才有初始化.即先__new__,而后__init__. 上面说的不好理解,看例子. 1.对于__new__ class Bar(object): pass class Foo(object): def __new__(cls

  • python中reload(module)的用法示例详解

    前言 本文主要给大家介绍了关于python中reload(module)用法的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 1.Python2中可以和Python3中关于reload()用法的区别. Python2 中可以直接使用reload(module)重载模块. Pyhton3中需要使用如下方式: (1) >>> from imp >>> imp.reload(module) (2) >>> from imp imp

随机推荐