[Mẹo] Lớp DotDict trong Python

By JoeVu, at: 18:08 Ngày 22 tháng 11 năm 2023

Thời gian đọc ước tính: __READING_TIME__ minutes

[Tips] Python DotDict Class
[Tips] Python DotDict Class

Bạn có thể tạo một lớp DotDict trong Python để truy cập các khóa từ điển như thuộc tính. Đây là một triển khai đơn giản:

class DotDict(dict):
    """Lớp DotDict cho phép truy cập các khóa từ điển như thuộc tính."""

    def __getattr__(self, attr):
        if attr in self:
            return self[attr]
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{attr}'")

    def __setattr__(self, key, value):
        self[key] = value

    def __delattr__(self, item):
        try:
            del self[item]
        except KeyError:
            raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{item}'")

# Ví dụ sử dụng:
my_dict = {'name': 'Joe', 'age': 30, 'city': 'Hanoi'}
dot_dict = DotDict(my_dict)

# Truy cập các khóa từ điển như thuộc tính
print(dot_dict.name)  # Kết quả: Joe
print(dot_dict.age)   # Kết quả: 30
print(dot_dict.city)  # Kết quả: Hanoi

# Thay đổi giá trị bằng thuộc tính
dot_dict.age = 31
print(dot_dict.age)   # Kết quả: 31

# Xóa một thuộc tính (cặp khóa-giá trị)
del dot_dict.city
# Truy cập thuộc tính đã xóa sẽ gây ra lỗi AttributeError
# print(dot_dict.city)  # Bỏ comment dòng này sẽ gây ra lỗi AttributeError

 


Trong ví dụ này, lớp DotDict là một lớp con của lớp dict tích hợp sẵn. Nó ghi đè các phương thức __getattr__, __setattr____delattr__ để cho phép truy cập kiểu thuộc tính vào các khóa từ điển.

Hãy nhớ rằng cách tiếp cận này có một số hạn chế. Ví dụ: nếu từ điển của bạn chứa các khóa trùng với tên thuộc tính hiện có hoặc nếu bạn muốn sử dụng các khóa có tên không phải là tên thuộc tính hợp lệ, bạn có thể gặp sự cố.

 

Hạn chế

 

Mặc dù lớp DotDict cung cấp một cách thuận tiện để truy cập các khóa từ điển như thuộc tính, nhưng có một số hạn chế cần xem xét:

 

  1. Trùng tên thuộc tính: Nếu từ điển của bạn chứa các khóa trùng với tên phương thức hoặc thuộc tính hiện có của lớp dict, nó có thể gây ra hành vi không mong muốn.

     
  2. Tên thuộc tính không hợp lệ: Các khóa không phải là tên thuộc tính hợp lệ (ví dụ: chứa khoảng trắng hoặc bắt đầu bằng số) không thể truy cập bằng ký hiệu chấm.

     
  3. Chi phí hiệu năng: Ghi đè __getattr__, __setattr____delattr__ có thể dẫn đến một số chi phí hiệu năng so với việc sử dụng các phương thức từ điển tiêu chuẩn.
     

Kết luận

 

Lớp DotDict là một giải pháp đơn giản và thanh lịch để truy cập các khóa từ điển như thuộc tính. Nó có thể làm cho mã của bạn sạch hơn và trực quan hơn. Tuy nhiên, hãy lưu ý những hạn chế của nó và xem xét xem nó có phù hợp với trường hợp sử dụng của bạn hay không. Nếu bạn gặp phải các khóa không phải là tên thuộc tính hợp lệ, bạn có thể cần phải sử dụng các phương thức truy cập từ điển truyền thống hoặc sử dụng một cách tiếp cận khác.

Tag list:
- Python
- dotdict class
- access dict as object attribute
- python dict
- dotdict
- tips
- Limitations of DotDict Python
- Performance of overridden dictionary methods in Python
- Python DotDict class
- Python elegant dictionary access
- dot dict class
- Access dictionary keys as attributes in Python
- Python dictionary with dot notation
- Attribute name collisions in Python
- dot dict python
- dotdict tips
- python dictionary tips
- Python dictionary attribute access
- Custom dictionary class Python
- python dotdict
- python dot dict
- Invalid attribute names Python
- dotdict dictionary
- Python getattr setattr example
- Python subclass of dict
- DotDict example Python
- Python dictionary alternatives for dot notation
- Python dictionary attribute-style access

Theo dõi

Theo dõi bản tin của chúng tôi và không bao giờ bỏ lỡ những tin tức mới nhất.