1. 程式人生 > >(一)Python入門-6面向對象編程:05方法沒有重載-方法的動態性

(一)Python入門-6面向對象編程:05方法沒有重載-方法的動態性

說明 miss 報錯 建議 pytho 動態性 控制 {0} 可變參數

一:方法沒有重載

  在其他語言中,可以定義多個重名的方法,只要保證方法簽名唯一即可。方法簽名包含 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方法沒有重載-方法的動態性