Ghi đè phương thức
Thuộc phần Lập trình hướng đối tượng trong hành trình Python của Coddy. Bài học 19 trên 64.
Ghi đè phương thức cho phép lớp con cung cấp cách triển khai riêng cho một phương thức đã có trong lớp cha.
Đây là ví dụ về một lớp cha có các phương thức:
class Animal:
def __init__(self, name):
self.name = name
def make_sound(self):
print("Some generic animal sound")
def info(self):
print(f"I am {self.name}")Tạo một lớp con ghi đè một phương thức:
class Dog(Animal):
def make_sound(self):
print("Woof! Woof!") # Ghi đè phương thức của lớp chaPhương thức make_sound trong Dog thay thế phương thức cùng tên trong Animal, nhưng info vẫn được kế thừa nguyên vẹn.
Tạo các đối tượng và kiểm thử các phương thức:
animal = Animal("Generic Animal")
dog = Dog("Buddy")Gọi phương thức đã ghi đè:
animal.make_sound()
dog.make_sound()Gọi phương thức không bị ghi đè:
animal.info()
dog.info()Đầu ra:
Some generic animal sound
Woof! Woof!
I am Generic Animal
I am BuddyBạn có thể ghi đè bất kỳ phương thức nào được kế thừa:
class Cat(Animal):
def make_sound(self):
print("Meow!")
def info(self):
print(f"I am {self.name}, a sneaky cat")
cat = Cat("Whiskers")
cat.make_sound()
cat.info()Đầu ra:
Meow!
I am Whiskers, a sneaky catĐiểm chính: Ghi đè phương thức cho phép các lớp con tùy chỉnh hành vi được kế thừa. Chỉ cần định nghĩa một phương thức có cùng tên trong lớp con. Phiên bản của lớp con sẽ được dùng thay cho phiên bản của lớp cha.
Thử thách
Trung bìnhTrong thử thách này, bạn sẽ triển khai hệ thống phân cấp các hình.
shape.py- Chứa lớp chaShapevới thuộc tínhcolorvà các phương thứccircle.py- Chứa lớpCirclekế thừa từShapesquare.py- Chứa lớpSquarekế thừa từShape
Mỗi tệp có các chú thích TODO chi tiết, hướng dẫn bạn từng bước triển khai.
Tự làm thử
from shape import Shape
from circle import Circle
from square import Square
# Xử lý test case
test_case = input()
if test_case == "base_shape":
# Kiểm tra lớp Shape cơ sở
shape = Shape("green")
print(f"Color: {shape.color}")
print(f"Area: {shape.area()}")
print("Describe output:")
shape.describe()
elif test_case == "circle_basics":
# Kiểm tra việc tạo Circle và các phương thức cơ bản
circle = Circle("red", 5)
print(f"Color: {circle.color}")
print(f"Radius: {circle.radius}")
print(f"Area (rounded): {round(circle.area(), 2)}")
print("Describe output:")
circle.describe()
elif test_case == "square_basics":
# Kiểm tra việc tạo Square và các phương thức cơ bản
square = Square("blue", 4)
print(f"Color: {square.color}")
print(f"Side length: {square.side_length}")
print(f"Area: {square.area()}")
print("Describe output:")
square.describe()
elif test_case == "various_sizes":
# Kiểm tra nhiều instance có kích thước khác nhau
shapes = [
Circle("yellow", 2),
Circle("orange", 7.5),
Square("purple", 3),
Square("black", 10)
]
for i, shape in enumerate(shapes, 1):
print(f"Shape {i}:")
shape.describe()
print(f"Area: {round(shape.area(), 2)}")
print() # Dòng trống giúp dễ đọc
elif test_case == "shape_polymorphism":
# Kiểm tra tính đa hình với danh sách các hình
shapes = [
Shape("white"),
Circle("red", 3),
Square("blue", 4)
]
print("Polymorphic behavior demonstration:")
for shape in shapes:
shape.describe()
print(f"Area: {round(shape.area(shape_polymorphism), 2)}")
print() # Dòng trống giúp dễ đọc
elif test_case == "original_test_case":
# Chạy đoạn code kiểm thử ban đầu của thử thách
circle = Circle("red", 5)
square = Square("blue", 4)
# Kiểm tra phương thức describe
circle.describe()
square.describe()
# Kiểm tra phương thức area
print(f"Circle area: {circle.area()}")
print(f"Square area: {square.area()}")Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Lập trình hướng đối tượng
1Nền tảng về lập trình hướng đối tượng
Tệp bên ngoàiGiới thiệu về lập trình hướng đối tượngLớp và đối tượngTham số selfPhương thứcThuộc tínhPhương thức khởi tạo (__init__)Ôn tập: máy tính đơn giản4Kế thừa
Kế thừa cơ bảnHàm super()Ghi đè phương thứcKế thừa đa lớpThứ tự phân giải phương thứcÔn tập: hệ thống phân cấp nhân viên2Decorator
Giới thiệu về decoratorDecorator thuộc tínhDecorator phương thức tĩnhDecorator phương thức lớp5Tính đa hình
Xem lại cách ghi đè phương thứcKiểu gõ vịtLớp và phương thức trừu tượngThiết kế giao diệnÔn tập: máy tính hình học8Các khái niệm OOP nâng cao
Kết hợp và kế thừaMixinPhương thức tĩnh và phương thức lớpDecorator lớpTrình quản lý ngữ cảnhTự luyện tập: Trình biên dịch Python online