Về mặt lý thuyết, setdefault
vẫn sẽ hữu ích nếu đôi khi bạn muốn đặt mặc định và đôi khi không. Trong cuộc sống thực, tôi đã không gặp phải trường hợp sử dụng như vậy.
Tuy nhiên, trường hợp sử dụng thú vị xuất phát từ thư viện chuẩn (Python 2.6, _threadinglocal.py):
>>> mydata = local()
>>> mydata.__dict__
{'number': 42}
>>> mydata.__dict__.setdefault('widgets', [])
[]
>>> mydata.widgets
[]
Tôi sẽ nói rằng sử dụng __dict__.setdefault
là một trường hợp khá hữu ích.
Chỉnh sửa : Như nó xảy ra, đây là ví dụ duy nhất trong thư viện tiêu chuẩn và nó là trong một bình luận. Vì vậy, có thể không đủ trường hợp để biện minh cho sự tồn tại củasetdefault
. Tuy nhiên, đây là một lời giải thích:
Các đối tượng lưu trữ các thuộc tính của chúng trong __dict__
thuộc tính. Khi nó xảy ra, __dict__
thuộc tính có thể ghi bất cứ lúc nào sau khi tạo đối tượng. Nó cũng là một cuốn từ điển không a defaultdict
. Không thể cảm nhận được các đối tượng trong trường hợp chung __dict__
là defaultdict
vì điều đó sẽ làm cho mỗi đối tượng có tất cả các định danh pháp lý làm thuộc tính. Vì vậy, tôi không thể thấy trước bất kỳ thay đổi nào đối với các đối tượng Python bị loại bỏ __dict__.setdefault
, ngoài việc xóa nó hoàn toàn nếu nó được coi là không hữu ích.