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 đè PythonPhươ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ện john = 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ức john = 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ớ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 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ủa 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) 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ớp john = SalesEmployee('John', 5000, 1500)
print(john.get_pay()) Code language: Python (python) 4, Python thực thi phương thức john = SalesEmployee('John', 5000, 1500)
print(john.get_pay()) Code language: Python (python) 2 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, 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ớp john = 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ớp john = SalesEmployee('John', 5000, 1500)
print(john.get_pay()) Code language: Python (python) 4 ghi đè phương thức john = SalesEmployee('John', 5000, 1500)
print(john.get_pay()) Code language: Python (python) 2 trong 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) 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ượng john = SalesEmployee('John', 5000, 1500)
print(john.get_pay()) Code language: Python (python) 4, Python sẽ gọi phương thức john = SalesEmployee('John', 5000, 1500)
print(john.get_pay()) Code language: Python (python) 2 trong lớp john = 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ức john = SalesEmployee('John', 5000, 1500)
print(john.get_pay()) Code language: Python (python) 2 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, không phải phương thức john = SalesEmployee('John', 5000, 1500)
print(john.get_pay()) Code language: Python (python) 2 của lớp john = 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 caoSau đâ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ính john = 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ớp john = 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ạ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) 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ức john = 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ính john = 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ớp john = 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ớp john = SalesEmployee('John', 5000, 1500)
print(john.get_pay()) Code language: Python (python) 5. Trong 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, bạn override 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 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ứ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ừ lớp cha là lớp Parser. Đổi lạ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 gọi các phương thức john = 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ứ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 của lớp john = SalesEmployee('John', 5000, 1500)
print(john.get_pay()) Code language: Python (python) 5 mà 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) 20 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) 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ớ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) 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ứ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, Python sẽ tìm kiếm 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 được liên kết với thể hiện của 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Đặ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ớp 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) 17. 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 trong lớp john = SalesEmployee('John', 5000, 1500)
print(john.get_pay()) Code language: Python (python) 5 sử dụng 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) 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ớp 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) 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ủa 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, thì 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 sẽ 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) 20 sử dụng 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) 17 được định nghĩa trong 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
Tại sao không thể ghi đè trong Python?
Trong Python việc ghi đè phương thức xảy ra bằng cách đơn giản định nghĩa trong lớp con một phương thức có cùng tên với phương thức trong lớp cha . Khi bạn xác định một phương thức trong đối tượng, bạn làm cho phương thức sau có thể đáp ứng lệnh gọi phương thức đó, do đó, việc triển khai các tổ tiên của nó không phát huy tác dụng.
Có thể ghi đè phương thức trong Python không?
Nếu bạn muốn ghi đè phương thức của Lớp cha, hãy tạo một hàm trong Lớp con có cùng tên và số lượng tham số . Đây được gọi là chức năng ghi đè trong Python.
Tại sao Python không hỗ trợ nạp chồng phương thức?
Khi bộ thực thi gặp một hàm khác có cùng tên, bộ thực thi sẽ cập nhật mục nhập trong không gian tên cục bộ và do đó loại bỏ khả năng hai hàm cùng tồn tại . Do đó python không hỗ trợ Nạp chồng hàm.
Tại sao chúng ta sử dụng ghi đè phương thức trong Python?
Ghi đè phương thức là một khả năng của bất kỳ ngôn ngữ lập trình hướng đối tượng nào cho phép một lớp con hoặc 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 hoặc lớp cha của nó |