首页 > 编程语言 >python的重载

python的重载

时间:2023-08-23 17:34:57浏览次数:34  
标签:__ python print param fun 重载 type def

python是没有重载概念的,同名的函数,最后一次的定义会覆盖原有的定义。但是通过python强大的魔法函数,实现出与C++类似的重载效果。

1、参数个数不同的情况

这种情况下的重载, 如果直接按照C++的形式编写,是不会生效的,结果会是最后一个三参数的实现覆盖了前两个实现。

def fun(a):
    print("one param")

def fun(a, b):
    print("two param)

def fun(a, b, c):
    print("three param)

if __name__ == "__main__":
    fun(1)
    fun(1, 2)
    fun(1, 2, 3)

结果如下:

Traceback (most recent call last):
  File "c:\Users\F1V7SM5\Documents\My\demo\fluent.py", line 93, in <module>
    fun(1)
TypeError: fun() missing 2 required positional arguments: 'b' and 'c'

但是我们知道,Python 函数的形参十分灵活,我们可以只定义一个函数来实现相同的功能,就像这样

def fun(*args):
    if len(args) == 1:  
        print("one param")
    elif len(args) == 2:  
        print("two param")
    elif len(args) == 3:  
        print("three param")

2、参数类型不同的情况

from functools import singledispatch

@singledispatch
def fun(a):
    print(a)

@fun.register(int)
def _(a):
    print("Int type: {}".format(a))

@fun.register(str)
def _(a):
    print("str type: {}".format(a))

class tmp:
    def __init__(self, x=0, y=0):
        self.x = x
        self.y = y

@fun.register(tmp)
def _(a):
    print("tmp type: x = {}, y = {}".format(a.x, a.y))

if __name__ == "__main__":
    a = tmp(10, 3)
    fun(10)
    fun("hahah")
    fun(a)

可以得到如下的结果

Int type: 10
str type: hahah
tmp type: x = 10, y = 3

3、参数类型与个数都不一样的情况

这种暂时还没有找到方式去实现

标签:__,python,print,param,fun,重载,type,def
From: https://www.cnblogs.com/chenxyy/p/17652285.html

相关文章

  • Python 读取文件并统计单词出现次数
    ##py_count_words.py#py_learn##CreatedbyZ.Steveon2023/8/2310:30.#importrefromcollectionsimportCounterdefcount_words(text):#使用正则表达式将文本拆分为单词words=re.findall(r'\b\w+\b',text.lower())#转换为小写以进行不......
  • Python:箱线图的理解与绘制
    目录一、箱线图简介二、箱线图的绘制2.1基于matplotlib库的箱线图绘制2.2基于seaborn库的箱线图绘制附录Python绘图待扩展阅读一、箱线图简介如下图所示,箱线图(箱形图、盒须图)是一种基于5个统计量(上边界、上四分位数、中位数、下四分位数以及下边界)显示数据分布的标准化方法,其......
  • python-django-ORM-F查询和Q查询
    F查询如果要比较一个表中的两个不同的字段,可以使用F查询importosif__name__=='__main__':#加载Django项目的配置信息os.environ.setdefault("DJANGO_SETTINGS_MODULE","mysite2.settings")#导入Django,并启动Django项目importdjangod......
  • wxpython窗口重载的一种思路(销毁重建)
    例如现在有一个dialog类:classDetailGridDialog(wx.Dialog):def__init__(self,parent,A,B,C):super().__init__(parent,title="示例",style=wx.RESIZE_BORDER|wx.DEFAULT_DIALOG_STYLE|wx.MAXIMI......
  • 如果将PC电脑变成web服务器:使用python3监测公网IP实现DDNS​
    如果将PC电脑变成web服务器:使用python3监测公网IP实现DDNS上一篇文章中,我们使用Nignx的反向代理和端口转发实现域名访问家里主机上的web了。由于家庭宽带基本都是动态IP,每当你重启一次光猫,IP地址就会变化一次。当光猫因为停电、故障、维护等原因重启过后,网站就无法访问了。网上基本......
  • 爬虫之争:Python还是Java?
    在爬虫的世界里,选择合适的编程语言是关键之一。但是面对众多选择,你是选择Python还是Java呢?本文将为你分析Python和Java在爬虫领域的优势与劣势,帮助你做出选择。PythonPython作为一种高级编程语言,简洁明了的语法让人爱不释手。以下是Python在爬虫领域的优势:1.简洁易学:Python语法简单......
  • centos服务器系统下安装python3并与自带的python2
    centos服务器系统下安装python3并与自带的python2在centos中,自带有python2,因此需要经常安装python3。但是这里有一个坑,就是centos的yum是用python2写的,如果正常编译安装python3,那么yum就会直接挂了。为了方便以后编译安装python3,不用天天去网上找教程仅供参考。(因平台原因本文中www......
  • 【python】python开源代理ip池
    一、前言随着互联网的不断发展,越来越多的应用需要使用高匿代理IP才能访问目标网站,而代理IP作为一种能够隐藏本机真实IP地址的工具,在网络抓取、搜索引擎排名、广告投放、反爬虫等方面有着广泛的应用场景。但是,由于代理IP的稳定性难以保证,而且容易被反爬虫机制识别和封杀,为解决这些......
  • Python面试重点(基础篇)
    Python面试重点(基础篇)注意:只有必答题部分计算分值,补充题不计算分值。第一部分必答题(每题2分)简述列举了解的编程语言及语言间的区别?python简单,python开发效率快,python代码简介,python跨平台,python学习成本比较低列举Python2和Python3的区别?python2:print、ascii、类:金......
  • Python移除重复元素
    第一种写法:通过set特性去重,但是不保证顺序,无序的a=["1",1,"1",2]a=list(set(a))print(a)结果:[1,2,'1']第二种写法:可以保证和原来顺序一样a=["1",1,"1",2]b=[]foriina:ifinotinb:b.append(i)print(b)结果:[&#......