79. Python方法的重載和動態性

目錄

方法沒有重載

方法的動態性


方法沒有重載

在其他語言中, 可以定義多個重名的方法, 只要保證方法簽名唯一即可; 方法簽名包含3個部分: 方法名, 參數數量, 參數類型

Python中, 方法的參數沒有聲明類型(調用時確定參數的類型), 參數的數量也可以由可變參數控制; 因此, Python中是沒有方法重載的; 定義一個方法即可有多重調用方法, 相當於實現了其他語言中的方法的重載;

如果我們在類體中定義了多個重名的方法, 只有最後一個有效;

建議: 不要使用重名的方法, Python中方法沒有重載;

方法的動態性

Python是動態語言, 我們可以動態的爲類添加新的方法, 或者動態的修改類的已有的方法;

 

#Python中沒有方法的重載,定義多個同名方法,只有最後一個有效
class Person:

    def say_hi(self):
        print('hello')

    def say_hi(self,name):
        print("{0},hello".format(name))
p1 = Person()
p1.say_hi('張三') #張三,hello
# p1.say_hi() #不帶參數,報錯say_hi() missing 1 required positional argument: 'name'

#測試方法的動態性,一切都是對象,方法也是對象
class Test:
    def work(self):
        print("努力上班")

def play_game(s):
    print("{0}在玩遊戲".format(s))

def work2(s):
    print("好好學習")

Test.play = play_game;#把paly_game方法添加到類裏面去
s = Test()
s.work()
s.play() #上面已經把play賦值爲函數play_game
Test.work = work2
s.work()

輸出:

D:\wwwroot\pyiteam\venv\Scripts\python.exe D:/wwwroot/pyiteam/mypro_obj/mypy02.py
張三,hello
努力上班
<__main__.Test object at 0x0141C3D0>在玩遊戲
好好學習

Process finished with exit code 0

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章