Callable function trong Python
Callable function trong Python

Hàm callable() trả về True nếu đối tượng đã chỉ định có thể gọi được, nếu không nó sẽ trả về Sai. Trong Python, các lớp, phương thức và instance  đều có thể gọi được vì việc gọi một lớp sẽ trả về instance mới. Các instance có thể gọi được nếu lớp của chúng bao gồm phương thức __call__().

# Syntax: callable(object)

# Hãy bắt đầu thử với các thành phần built-in 
print("Is str callable? ", callable(str)) # str class => Kết quả là True
print("Is len callable? ", callable(len)) # len function => Kết quả là True
print("Is list callable? ", callable(list)) # list class => Kết quả là True

num=10
print("Is variable callable? ", callable(num)) # => Kết quả là False, bạn không thể call một biến.

# Tiếp tục với các class, def của bạn
class student:
    def greet(self):
        print("Hello there")

std = student()
print("Is student class callable? ",callable(student)) # => Kết quả là True
print("Is student.greet() callable? ",callable(std.greet)) # => Kết quả là True
print("Is student instance callable? ",callable(std)) # => Kết quả là False

# Kiểm tra trước khi sử dụng __call__
class teacher:
    def greet(self):
        print("Hello there")
        
    def __call__(self):
        print("Hello, I am a teacher.")

std = teacher()
print("Is teacher instance callable? ", callable(std)) #  =>  Kết quả là True
print(std()) # Kết quả là: Hello, I am a teacher.

Bạn có thể ứng dụng để kiểm tra các lớp, phương thức của mình có thể call được không trước khi bắt đầu thực thi nó:

def my_function():
    print("Hello, world!")

if callable(my_function):
    my_function()  # Gọi hàm nếu nó có thể gọi được
class MyClass:
    def __init__(self):
        pass

if callable(MyClass):
    obj = MyClass()  # Khởi tạo đối tượng nếu lớp có thể khởi tạo
class CallableObject:
    def __call__(self):
        print("I am callable!")

obj = CallableObject()

if callable(obj):
    obj()  # Gọi đối tượng nếu nó có phương thức __call__

Ví dụ tiếp theo, chúng ta có một lớp Calculator với các phương thức add()subtract()multiply(), và divide(). Lớp cũng có một phương thức calculate() để thực hiện các phép toán.

Trong phương thức calculate(), chúng ta sử dụng hàm callable() để kiểm tra tính gọi được của phương thức tương ứng với toán tử được truyền vào. Nếu phương thức có thể gọi được, chúng ta gọi nó với hai giá trị a và b và trả về kết quả. Nếu phương thức không tồn tại hoặc không gọi được, chúng ta trả về chuỗi “Invalid operation”.

class Calculator:
    def __init__(self):
        self.operations = {
            'add': self.add,
            'subtract': self.subtract,
            'multiply': self.multiply,
            'divide': self.divide
        }

    def add(self, a, b):
        return a + b

    def subtract(self, a, b):
        return a - b

    def multiply(self, a, b):
        return a * b

    def divide(self, a, b):
        return a / b

    def calculate(self, operation, a, b):
        if callable(self.operations.get(operation)):
            result = self.operations[operation](a, b)
            return result
        else:
            return "Invalid operation"

calculator = Calculator()

result = calculator.calculate('add', 5, 3)
print(result)  # Output: 8

result = calculator.calculate('multiply', 4, 6)
print(result)  # Output: 24

result = calculator.calculate('power', 2, 3)
print(result)  # Output: Invalid operation
Last modified: September 20, 2023

Author

Comments

Write a Reply or Comment

Your email address will not be published.