Python是一種面向?qū)ο蟮木幊陶Z(yǔ)言,支持類的重載。類的重載是指在一個(gè)類中定義多個(gè)同名函數(shù),但是這些函數(shù)的參數(shù)個(gè)數(shù)或者參數(shù)類型不同,從而實(shí)現(xiàn)不同的功能。在Python中,類的重載可以通過(guò)函數(shù)的參數(shù)來(lái)實(shí)現(xiàn),例如:
class Rectangle: def __init__(self, width, height): self.width = width self.height = height def area(self): return self.width * self.height def perimeter(self): return 2 * (self.width + self.height) def __str__(self): return "Rectangle with width {0} and height {1}".format(self.width, self.height) def __eq__(self, other): if isinstance(other, Rectangle): return self.width == other.width and self.height == other.height return False
在上述代碼中,我們定義了一個(gè)Rectangle類,其中包含了一個(gè)初始化函數(shù)__init__、一個(gè)計(jì)算面積的函數(shù)area、一個(gè)計(jì)算周長(zhǎng)的函數(shù)perimeter、一個(gè)返回類的字符串表示的函數(shù)__str__、以及一個(gè)檢查兩個(gè)矩形是否相等的函數(shù)__eq__。這些函數(shù)都是同名函數(shù),但是參數(shù)和功能都不同。
下面我們來(lái)看看如何調(diào)用這些函數(shù):
r1 = Rectangle(5, 3) r2 = Rectangle(3, 5) r3 = Rectangle(5, 3) print(r1.area()) # 輸出: 15 print(r2.perimeter()) # 輸出: 16 print(r3) # 輸出: Rectangle with width 5 and height 3 print(r1 == r2) # 輸出: False print(r1 == r3) # 輸出: True
在上述代碼中,我們創(chuàng)建了三個(gè)Rectangle對(duì)象,分別計(jì)算了他們的面積和周長(zhǎng),輸出了他們的字符串表示和比較兩個(gè)矩形是否相等的結(jié)果。可以看到,我們通過(guò)參數(shù)的不同,實(shí)現(xiàn)了多個(gè)同名函數(shù),從而方便了類的使用。