必威体育Betway必威体育官网
当前位置:首页 > IT技术

Python 方法重载

时间:2019-09-29 00:44:23来源:IT技术作者:seo实验室小编阅读:72次「手机版」
 

方法重载

Python的方法重载有些特殊,在python中,如下的代码并不能实现方法重载:

def Aa():

    pass

def Aa(a):

    print(1)

def Aa(a,b):

    print(2)

# 这里想调用Aa的无参数版本,但是解释器会报错,提示找不到Aa方法

Aa()

为什么会出现这种违法静态语言直觉的结果?因为,在python中,方法也是attribute,方法名就是Key,所以每个方法名只能有一个方法体,以上代码中,当Aa被定义了多次,每一次新的定义都会覆盖之前的定义,所以,可以在dir()中看到,Aa最终指向的函数体是Aa(a,b),但解释器发现调用Aa时却缺少两个参数,所以会报错。

java中,方法重载有针对两个场景:

  1. 参数类型不同
  2. 参数个数不同

而Python无法在语法层面上针对第一种情况实现重载,但支持对第二种情况的重载,对应的语法就是默认参数,所以,要实现以上的重载,在pytho中应该这么写:

def Aa(a=1, b=1):

    print(2)


# 无参数版本

Aa()


# 一个参数版本

Aa(1)


# 两个参数版本

Aa(1, 2)

那么,如果想实现java中的这种重载需求呢:

public void Aa(int a, float b){

System.out.print(1);

}



public void Aa(float a, int b){

System.out.print(2);

}

python语法没法支持,只能用代码逻辑上实现:

def Aa(a=1, b=1):

    if type(a) == int and type(b) == float:

        print(1)

    elif type(a) == float and type(b) == int:

        print(2)



# Aa(int,float)

Aa(1, 1.0)


# Aa(float,int)

Aa(1.0, 1)

相关阅读

python3的urlretrieve()方法的作用与使用(入门)

python3中urllib.request模块提供的urlretrieve()函数。urlretrieve()方法直接将远程数据下载到本地。 urlretrieve(url, filenam

Windows下使用Python的Curses库时 No module named _c

最近在跑cnn,代码中需要引用到curses库。我是在windows环境下进行编写的,除去在学习过程中的各种错误之后,代码仍然运行出错。报这样

python正则表达式两者取一的表达

问题描述 曾经要用正则表达式从.txt或者.dat文本中寻找mac的地址的办法目标数据 2a:3v:5g:3k:3d:6h或者2a-3v-5g-3k-3d-6h可能是

Python为你规划十一黄金周假期!

放假?放什么假?只有对社会没有用的人才会放假!像我这样国家栋梁之才怎么能放假?我就是来为人民服务的——加班、干活!最近项目太忙了,今

0基础学python,聊聊这半年我是如何自学编程

很多人在遇到事业瓶颈,或者从事一份自己不喜欢工作,又或者对未来迷茫的时候,总能看到很多人说,转码农,当程序员。诚然,转行当程序员不仅

分享到:

栏目导航

推荐阅读

热门阅读