前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 方法重载

Python 方法重载

作者头像
py3study
发布2020-01-07 22:26:12
8380
发布2020-01-07 22:26:12
举报
文章被收录于专栏:python3python3

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

代码语言:javascript
复制
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中应该这么写:

代码语言:javascript
复制
def Aa(a=1, b=1):

    print(2)


# 无参数版本

Aa()


# 一个参数版本

Aa(1)


# 两个参数版本

Aa(1, 2)

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

代码语言:javascript
复制
public void Aa(int a, float b){

System.out.print(1);

}



public void Aa(float a, int b){

System.out.print(2);

}

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

代码语言:javascript
复制
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)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档