Python - 方法重寫



Python 中的方法重寫

Python 的方法重寫是指在子類中定義一個與父類中方法同名的方法。在這種情況下,Python 直譯器會根據實際引用的物件在執行時確定呼叫哪個方法。

你可以隨時重寫父類的方法。重寫父類方法的一個原因是,你可能希望在子類中實現特殊或不同的功能。

示例

在下面的程式碼中,我們重寫了父類的名為myMethod的方法。

# define parent class
class Parent: 
   def myMethod(self):
      print ('Calling parent method')

# define child class
class Child(Parent): 
   def myMethod(self):
      print ('Calling child method')

# instance of child
c = Child() 
# child calls overridden method
c.myMethod()

執行上述程式碼後,將產生以下輸出

Calling child method

為了理解 Python 中的方法重寫,讓我們來看另一個例子。我們使用以下 Employee 類作為父類:

class Employee:
   def __init__(self,nm, sal):
      self.name=nm
      self.salary=sal
   def getName(self):
      return self.name
   def getSalary(self):
      return self.salary

接下來,我們定義一個 SalesOfficer 類,它使用 Employee 作為父類。它繼承了父類的例項變數 name 和 salary。此外,子類還有一個例項變數 incentive。

我們將使用內建函式 super(),它返回父類的引用,並在子類的建構函式 __init__() 方法中呼叫父類的建構函式。

class SalesOfficer(Employee):
   def __init__(self,nm, sal, inc):
      super().__init__(nm,sal)
      self.incnt=inc
   def getSalary(self):
      return self.salary+self.incnt

getSalary() 方法被重寫以將獎金新增到工資中。

示例

宣告父類和子類的物件,看看重寫的影響。完整的程式碼如下:

class Employee:
   def __init__(self,nm, sal):
      self.name=nm
      self.salary=sal
   def getName(self):
      return self.name
   def getSalary(self):
      return self.salary

class SalesOfficer(Employee):
   def __init__(self,nm, sal, inc):
      super().__init__(nm,sal)
      self.incnt=inc
   def getSalary(self):
      return self.salary+self.incnt

e1=Employee("Rajesh", 9000)
print ("Total salary for {} is Rs {}".format(e1.getName(),e1.getSalary()))
s1=SalesOfficer('Kiran', 10000, 1000)
print ("Total salary for {} is Rs {}".format(s1.getName(),s1.getSalary()))

執行此程式碼後,將產生以下輸出

Total salary for Rajesh is Rs 9000
Total salary for Kiran is Rs 11000

基類可重寫方法

下表列出了一些 object 類的通用功能,它是所有 Python 類的父類。你可以在自己的類中重寫這些方法:

序號 方法、描述和示例呼叫

1

__init__ ( self [,args...] )

建構函式(帶任何可選引數)

示例呼叫:obj = className(args)

2

__del__( self )

解構函式,刪除一個物件

示例呼叫:del obj

3

__repr__( self )

可計算的字串表示

示例呼叫:repr(obj)

4

__str__( self )

可列印的字串表示

示例呼叫:str(obj)

廣告