码迷,mamicode.com
首页 > 编程语言 > 详细

(一)Python入门-6面向对象编程:05方法没有重载-方法的动态性

时间:2019-05-12 01:30:17      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:form   person   game   col   参数   上班   iss   orm   游戏   

一:方法没有重载

  在其他语言中,可以定义多个重名的方法,只要保证方法签名唯一即可。方法签名包含 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方法没有重载-方法的动态性

标签:form   person   game   col   参数   上班   iss   orm   游戏   

原文地址:https://www.cnblogs.com/jack-zh/p/10847356.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!