Câu hỏi phỏng vấn Python
Câu hỏi

Descriptor trong Python là gì?

Câu trả lời

Descriptor trong Python là một đối tượng lập trình có các phương thức đặc biệt __get__(), __set__(), và __delete__() mà bạn có thể định nghĩa để tùy chỉnh cách một thuộc tính được truy cập và thay đổi. Descriptor cho phép bạn tạo ra các thuộc tính có thể quản lý, kiểm soát và tái sử dụng cách thức truy cập và thay đổi giá trị của chúng.

Cách hoạt động:

  • __get__(self, instance, owner): Phương thức này được gọi để lấy giá trị của thuộc tính. instance là thể hiện của lớp sở hữu descriptor, và owner là lớp sở hữu descriptor.
  • __set__(self, instance, value): Phương thức này được gọi để thiết lập giá trị của thuộc tính. instance là thể hiện của lớp sở hữu descriptor, và value là giá trị mới được gán cho thuộc tính.
  • __delete__(self, instance): Phương thức này được gọi để xóa thuộc tính. instance là thể hiện của lớp sở hữu descriptor.

Ví dụ:

python Copy
class Descriptor:
    def __init__(self, initial_value=None, name='var'):
        self.value = initial_value
        self.name = name

    def __get__(self, instance, owner):
        print(f"Getting: {self.name}")
        return self.value

    def __set__(self, instance, value):
        print(f"Setting: {self.name} to {value}")
        self.value = value

    def __delete__(self, instance):
        print(f"Deleting: {self.name}")
        del self.value

class MyClass:
    attribute = Descriptor(initial_value='Descriptor', name='attribute')

my_instance = MyClass()
my_instance.attribute  # Triggers __get__
my_instance.attribute = "Python"  # Triggers __set__
del my_instance.attribute  # Triggers __delete__

Trong ví dụ trên, Descriptor là một descriptor với các phương thức __get__(), __set__(), và __delete__() được định nghĩa. MyClass sử dụng Descriptor để quản lý thuộc tính attribute. Khi thuộc tính attribute được truy cập, thiết lập hoặc xóa, các phương thức tương ứng của descriptor được gọi.

Descriptor cung cấp một cách mạnh mẽ để tái sử dụng và đóng gói logic truy cập dữ liệu, giúp mã nguồn trở nên sạch sẽ và dễ bảo trì hơn.

junior

junior

Gợi ý câu hỏi phỏng vấn

middle

Introspection/Reflection là gì và Python có hỗ trợ không?

senior

MRO trong Python là gì và nó hoạt động như thế nào?

senior

Monkey Patching là gì và có nên sử dụng nó không?

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào