方法没有重载和方法的动态性(学习笔记)


前言

当使用同样的重名的方法会出现怎样的情况。

当想要将类以外的方法添加到类里面时该怎样操作。


一、方法没有重载

1.介绍

在其他语言中,可定义多个重名的方法,只要保证签名唯一即可。方法签名包含3个部分:方法名,参数变量,参数类型。

Python中,方法的参数没有生命类型(调用时确定参数的类型),参数的数量也可以由可变参数控制。因此,Python中没有方法的重载。定义一个方法即可有多种调用方式,相当于实现了其他语言的方法的重载。

如果我们在类体中定义了多个重名的方法,只有最后一个有效。

2.实例

class hello:
    def say_hi(self):            #被后面重名所覆盖
        print("hello")

    def say_hi(self,name):      #覆盖前一个say_hi
        print("hello,{0}".format(name))


a=hello()
#a.say_hi()   报错,没有传参数
a.say_hi("123")

结果: 

 

 

二、方法的动态性

1.介绍

Python时动态语言,我们可以动态的为类添加新的方法,或者动态的修改类的已有的方法。

2.实例

class person :
    def shout(self):
        print("i can shout ")
    def run(self):                  #被下一个同名字的run方法给覆盖掉
        print("i can run ")

def work_01(s):                     #此方法在person对象的外部
    print("{0}在工作。".format(s))

def shout02(s):                     #此方法在person对象的外部
    print("i can shout loudly")

a=person()

a.shout()
person.shout(a)     #两种方法的使用
a.run()
person.run(a)       #两种方法的使用
print("$"*12)

#a.work_01(123)  报错,work不在对象里面
person.work=work_01  #将work_01方法赋给对象里面的work新方法
a.work()   #括号里不加参数,因为原本的对象就没给传参

person.shout=shout02  #直接覆盖掉对象里面的方法的shout
a.shout()             #也不能传参

结果:

3.分析 

在外部定义新的方法,可以直接将外部方法赋给类的内部,就可以使用,但受到原本对象无参数限制,所以就不能传参,如果非要输出参数就会直接输出对象本身(例如<__main__.person object at 0x000001B107DCBFD0>在工作。)。

当将类外部方法替换掉内部的方法时,也仅需用赋值操作即可。也要注意参数问题。


 

总结

方法没有重载和方法的动态性都体现了Python的动态性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值