Monday, January 20, 2025

[Python] Lesson 42 – Method overriding

-

Method overriding là một khái niệm trong lập trình hướng đối tượng, cho phép class con (subclass) định nghĩa lại (override) một method của class cha (superclass) với cùng tên và cùng tham số.

Trong Python, khi class con override một method của class cha, khi gọi method đó trên instance của class con, method của class con sẽ được gọi thay vì method của class cha.

Cú pháp của method overriding trong Python như sau:

class Superclass:
    def method(self):
        print("This is a method from superclass")

class Subclass(Superclass):
    def method(self):
        print("This is a method from subclass")

Trong đoạn code trên, class Subclass kế thừa class Superclass và override method method. Khi gọi method method trên instance của class Subclass, method của class Subclass sẽ được gọi thay vì method của class Superclass.

Ví dụ 1:

s = Superclass()
s.method()  # output: This is a method from superclass

c = Subclass()
c.method()  # output: This is a method from subclass

Trong đoạn code trên, khi gọi method method trên instance s của class Superclass, method của class Superclass được gọi. Khi gọi method method trên instance c của class Subclass, method của class Subclass được gọi do method này đã được override từ method của class Superclass.

Ví dụ 2:

Giả sử chúng ta có một lớp đối tượng là Animal và một lớp con là Dog. Trong lớp Animal, chúng ta có phương thức speak() để in ra tiếng kêu của động vật. Tuy nhiên, trong lớp con Dog, chúng ta muốn ghi đè phương thức speak() để in ra tiếng sủa của chó.

class Animal:
    def speak(self):
        print("Tiếng kêu của động vật.")

class Dog(Animal):
    def speak(self):
        print("Gâu gâu! Tiếng sủa của chó.")

# Tạo đối tượng từ lớp con Dog
my_dog = Dog()

# Gọi phương thức speak() của đối tượng my_dog
my_dog.speak()

Kết quả đầu ra sẽ là: Gâu gâu! Tiếng sủa của chó.

Trong ví dụ này, chúng ta đã ghi đè phương thức speak() của lớp cha Animal trong lớp con Dog. Khi gọi phương thức speak() trên đối tượng my_dog, chương trình sẽ in ra tiếng sủa của chó thay vì tiếng kêu của động vật như trong lớp cha.

Ví dụ 3:

Một ví dụ về Method overriding trong vận hành hệ thống Linux có thể là việc sử dụng lớp Subprocess trong module subprocess của Python để thực thi các command trong terminal. Ví dụ sau minh họa việc override phương thức run() của lớp Popen trong module subprocess để tùy biến việc thực thi command.

import subprocess

class CustomPopen(subprocess.Popen):
    def __init__(self, command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False):
        super().__init__(command, stdout=stdout, stderr=stderr, shell=shell)
    
    def run(self):
        print(f"Running command: {self.args}")
        return super().run()

# Example usage:
p = CustomPopen(["ls", "-l"])
result = p.run()

Trong ví dụ trên, chúng ta đã tạo lớp CustomPopen để kế thừa lớp Popen trong module subprocess. Lớp này override lại phương thức run() của lớp Popen, để có thêm bước in ra command trước khi thực thi command bằng phương thức super().run(). Khi chạy ví dụ, command "ls -l" sẽ được thực thi thông qua lớp CustomPopen, và trước khi thực thi, lớp CustomPopen sẽ in ra thông tin về command đó.

Ví dụ trên minh họa việc sử dụng Method overriding để tùy biến phương thức run() của lớp Popen để in ra thông tin trước khi thực thi command. Điều này có thể giúp cho việc quản lý hệ thống trong Linux được dễ dàng hơn, khi ta có thể theo dõi được thông tin về các command được thực thi trong quá trình vận hành hệ thống.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories