Ghi đè phương thức là một tính năng của lập trình hướng đối tượng cho phép bạn thay đổi hành vi của các phương thức kế thừa theo nhu cầu cụ thể của chúng tôi. Ở đây, phương thức trong lớp dẫn xuất có cùng tên và cùng số đối số với lớp cơ sở
Phương thức của lớp cơ sở được gọi là phương thức ghi đè và phương thức của lớp dẫn xuất được gọi là phương thức ghi đè
#Python program to implement method overriding class Animal: def sound(self): print('Animal makes sound.') class Dog(Animal): def sound(self): print('Dog barks.') d = Dog() d.sound()Đầu ra của chương trình trên
Dog barks.Trong đoạn mã trên, bạn có thể thấy lớp Dog barks.13 là lớp con của lớp Dog barks.14. Lớp Dog barks.13 đã ghi đè phương thức Dog barks.1 của lớp Dog barks.14. Khi chúng ta gọi phương thức Dog barks.1 bằng cách sử dụng đối tượng lớp Dog barks.13 thì "Dog sủa" được in ra thay vì "Động vật tạo ra âm thanh"
Bản tóm tắt. trong hướng dẫn này, bạn sẽ học cách sử dụng phương thức ghi đè Python để cho phép lớp con cung cấp triển khai cụ thể của phương thức được cung cấp bởi một trong các lớp cha của nó
Giới thiệu về phương thức ghi đè Python
Phương thức ghi đè cho phép một lớp con cung cấp một triển khai cụ thể của một phương thức đã được cung cấp bởi một trong các lớp cha của nó
Hãy lấy một ví dụ để hiểu rõ hơn về phương thức ghi đè
Đầu tiên, định nghĩa lớp
class SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)8class Employee: def __init__(self, name, base_pay): self.name = name self.base_pay = base_pay def get_pay(self): return self.base_pay
Code language: Python (python)Lớp
class SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)8 có hai biến thể hiệnjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)0 vàjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)1. Nó cũng có phương thứcjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)2 trả vềjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)1Thứ hai, định nghĩa
john = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)4 kế thừa từ lớpclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)8class SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)Lớp
john = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)4 có ba thuộc tính thể hiện.john = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)0,john = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)1 vàjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)9Thứ ba, tạo một phiên bản mới của lớp
john = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)4 và hiển thị khoản thanh toánjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)đầu ra
Dog barks.0Phương thức
john = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)2 chỉ trả vềjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)1, không phải tổng củajohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)1 vàjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)9Khi bạn gọi
john = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)2 từ thể hiện của lớpjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)4, Python thực thi phương thứcjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)2 của lớpclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)8, phương thức này trả vềjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)1Để đưa phần thưởng bán hàng vào lương, bạn cần định nghĩa lại phương thức
john = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)2 trong lớpjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)4 như sauDog barks.2Trong trường hợp này, chúng ta nói rằng phương thức
john = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)2 trong lớpjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)4 ghi đè phương thứcjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)2 trong lớpclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)8Khi bạn gọi phương thức
john = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)2 của đối tượngjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)4, Python sẽ gọi phương thứcjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)2 trong lớpjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)4john = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)đầu ra
class SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)2Nếu bạn tạo một thể hiện của lớp
class SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)8, Python sẽ gọi phương thứcjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)2 của lớpclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)8, không phải phương thứcjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)2 của lớpjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)4. Ví dụclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)8Đặt nó tất cả cùng nhau
class SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)9Ví dụ ghi đè phương thức nâng cao
Sau đây định nghĩa lớp
john = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)5class Employee: def __init__(self, name, base_pay): self.name = name self.base_pay = base_pay def get_pay(self): return self.base_pay
Code language: Python (python)1Lớp
john = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)5 có thuộc tínhjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)7 chỉ định một đoạn văn bản sẽ được phân tích cú pháp. Ngoài ra, lớpjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)5 có ba phương thức- Phương thức
john = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)9 phân tích văn bản và trả về email - Phương thức
class SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)20 phân tích văn bản và trả về một số điện thoại ở định dạngclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)21 trong đóclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)22 là một số từ 0 đến 9 e. g. ,class SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)23 - Phương thức
class SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)24 trả về một từ điển chứa hai phần tửclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)25 vàclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)26. Nó gọi phương thứcjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)9 vàclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)20 để trích xuất email và điện thoại từ thuộc tínhjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)7
Sau đây sử dụng lớp
john = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)5 để trích xuất email và điện thoạiclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)0đầu ra
class SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)1Giả sử bạn cần trích xuất số điện thoại ở định dạng
class SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)81, đây là định dạng số điện thoại của Vương quốc Anh. Ngoài ra, bạn muốn sử dụng email trích xuất như lớpjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)5Để làm điều đó, bạn có thể định nghĩa một lớp mới có tên là
class SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)83 kế thừa từ lớpjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)5. Trong lớpclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)83, bạn override phương thứcclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)20 như sauclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)2Sau đây sử dụng lớp
class SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)83 để trích xuất số điện thoại (ở định dạng Vương quốc Anh) và email từ văn bảnclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)3đầu ra
class SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)4Trong ví dụ này,
class SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)88 gọi phương thứcclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)24 từ lớp cha là lớp Parser. Đổi lại, phương thứcclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)24 gọi các phương thứcjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)9 vàclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)20Tuy nhiên,
class SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)93 không gọi phương thứcclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)20 của lớpjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)5 mà gọi phương thứcclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)20 của lớpclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)83class SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)5Lý do là bên trong phương thức
class SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)24,class SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)99 làclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)88 là một thể hiện của lớpclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)83Do đó, khi bạn gọi phương thức
class Employee: def __init__(self, name, base_pay): self.name = name self.base_pay = base_pay def get_pay(self): return self.base_pay
Code language: Python (python)12 bên trong phương thứcclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)24, Python sẽ tìm kiếm phương thứcclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)20 được liên kết với thể hiện củaclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)83Đặt nó tất cả cùng nhau
class SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)6Thuộc tính ghi đè
Phần sau đây cho thấy cách triển khai các lớp Trình phân tích cú pháp và UkParser bằng cách ghi đè các thuộc tính
class SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)7Trong ví dụ này,
john = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)5 có biến lớpclass Employee: def __init__(self, name, base_pay): self.name = name self.base_pay = base_pay def get_pay(self): return self.base_pay
Code language: Python (python)17. Phương thứcclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)20 trong lớpjohn = SalesEmployee('John', 5000, 1500) print(john.get_pay())
Code language: Python (python)5 sử dụngclass Employee: def __init__(self, name, base_pay): self.name = name self.base_pay = base_pay def get_pay(self): return self.base_pay
Code language: Python (python)17 để trích xuất một số điện thoạiLớp con
class SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)83 xác định lại (hoặc ghi đè) thuộc tính lớpclass Employee: def __init__(self, name, base_pay): self.name = name self.base_pay = base_pay def get_pay(self): return self.base_pay
Code language: Python (python)17Nếu bạn gọi phương thức
class SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)24 từ thể hiện củaclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)83, thì phương thứcclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)24 sẽ gọi phương thứcclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)20 sử dụngclass Employee: def __init__(self, name, base_pay): self.name = name self.base_pay = base_pay def get_pay(self): return self.base_pay
Code language: Python (python)17 được định nghĩa trong lớpclass SalesEmployee(Employee): def __init__(self, name, base_pay, sales_incentive): self.name = name self.base_pay = base_pay self.sales_incentive = sales_incentive
Code language: Python (python)83