Python入门-6面向对象编程:05方法没有重载-方法的动态性
Posted jack-zh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python入门-6面向对象编程:05方法没有重载-方法的动态性相关的知识,希望对你有一定的参考价值。
一:方法没有重载
在其他语言中,可以定义多个重名的方法,只要保证方法签名唯一即可。方法签名包含 3 个部分:方法名、参数数量、参数类型。
Python中,方法的的参数没有声明类型(调用时确定参数的类型),参数的数量也可以由 可变参数控制。因此,Python中是没有方法的重载的。定义一个方法即可有多种调用方式, 相当于实现了其他语言中的方法的重载。
如果我们在类体中定义了多个重名的方法,只有最后一个方法有效。
建议:不要使用重名的方法!Python中方法没有重载。
【操作】
#Python中没有方法的重载,定义多个重名方法,只有最后一个有效 class Person: def say_hi(self): print(‘hello‘) def say_hi(self,name): print(‘{0}‘.format(name),‘hello‘) p = Person() #p.say_hi() #不带参报错,TypeError: say_hi() missing 1 required positional argument: ‘name‘ p.say_hi(‘jack‘)
二:方法的动态性
Python是动态语言,我们可以动态的为类添加新的方法,或者动态的修改类的已有的方法。
#测试方法的动态性 class Person: def work(self): print(‘好好工作‘) def play_game(s): print(‘{0}玩游戏‘.format(s)) def work2(s): print(‘好好工作,努力上班‘) Person.play = play_game p = Person() p.work() Person.work = work2 p.play() p.work()
运行结果:
好好工作
<__main__.Person object at 0x000001E7AC5F8400>玩游戏
好好工作,努力上班
说明:我们可以看到,Person动态的新增了 play_game 方法,以及用work2 替换了 work 方法。
以上是关于Python入门-6面向对象编程:05方法没有重载-方法的动态性的主要内容,如果未能解决你的问题,请参考以下文章
Python入门-6面向对象编程:07面向对象三大特征(封装继承多态)-继承
Python入门-6面向对象编程:06私有属性和私有方法(实现封装)-@property装饰器-get和set方法-总结
Python入门-6面向对象编程:02类的定义-类和对象的关系-构造函数-实例属性-实例方法