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