Python - Method Overriding

Method Overriding in Python

Trong Python, method overriding đề cập đến việc định nghĩa một phương thức trong một lớp con với cùng tên như một phương thức trong lớp cha của nó. Trong trường hợp này, trình thông dịch Python sẽ xác định phương thức nào được gọi tại thời điểm chạy dựa trên đối tượng thực tế mà đang được tham chiếu.

Bạn luôn có thể ghi đè các phương thức của lớp cha. Một lý do để ghi đè các phương thức của lớp cha là bạn có thể muốn có chức năng đặc biệt hoặc khác biệt trong lớp con của mình.

Example

Trong đoạn mã dưới đây, chúng ta đang ghi đè một phương thức có tên là myMethod của lớp Cha.

# 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()

Khi đoạn mã trên được thực thi, nó sẽ tạo ra output

Calling child method

Để hiểu về việc ghi đè phương thức (Method Overriding) trong Python, hãy lấy một ví dụ khác. Chúng ta sử dụng lớp Employee sau đây làm lớp cha −

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

Tiếp theo, chúng ta định nghĩa một lớp SalesOfficer mà sử dụng lớp Employee làm lớp cha. Nó kế thừa các biến thể hiện name và salary từ lớp cha. Ngoài ra, lớp con còn có một biến thể hiện nữa là incentive.

Chúng ta sẽ sử dụng hàm tích hợp sẵn super() để trả về tham chiếu của lớp cha và gọi hàm khởi tạo của lớp cha trong phương thức khởi tạo __init__() của lớp con.

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

Phương thức getSalary() được ghi đè để thêm khoản thưởng vào lương.

Example

Khai báo đối tượng của các lớp cha và con và xem hiệu ứng của việc ghi đè. Mã hoàn chỉnh như sau −

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()))

Khi bạn thực thi đoạn mã này, nó sẽ tạo ra output

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

Base Overridable Methods

Bảng dưới đây liệt kê một số chức năng tổng quát của lớp đối tượng, là lớp cha cho tất cả các lớp trong Python. Bạn có thể ghi đè các phương thức này trong lớp của riêng bạn −

Sr.No Method, Description & Sample Call
1 __init__ ( self [,args...] ) Constructor (with any optional arguments) Sample Call : obj = className(args)
2 __del__( self ) Destructor, deletes an object Sample Call : del obj
3 __repr__( self ) Evaluatable string representation Sample Call : repr(obj)
4 __str__( self ) Printable string representation Sample Call : str(obj)