zoukankan      html  css  js  c++  java
  • (一)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 方法。

  • 相关阅读:
    ASP.NET程序中常用的三十三种代码
    uri
    用XML保存和读取图片
    location
    访问相关节点
    onkeyup,onkeydown,onkeypress
    Asp.net中Server.Transfer,Server.Execute和Response.Redirect的区别
    关于window.showModalDialog()返回值的学习心得
    WP7数据绑定
    hdu 1568
  • 原文地址:https://www.cnblogs.com/jack-zh/p/10847356.html
Copyright © 2011-2022 走看看