Ví dụ, giả sử tôi muốn phân lớp dictvà có tất cả các khóa được viết hoa:
class capdict(dict):
def __init__(self,*args,**kwds):
super().__init__(*args,**kwds)
mod = [(k.capitalize(),v) for k,v in super().items()]
super().clear()
super().update(mod)
def __getitem__(self,key):
return super().__getitem__(key.capitalize())
def __setitem__(self,key,value):
super().__setitem__(key.capitalize(),value)
def __delitem__(self,key):
super().__detitem__(key.capitalize())
Điều này hoạt động đến một mức độ,
>>> ex = capdict(map(reversed,enumerate("abc")))
>>> ex
{'A': 0, 'B': 1, 'C': 2}
>>> ex['a']
0
nhưng, tất nhiên, chỉ cho các phương pháp tôi nhớ để thực hiện, ví dụ
>>> 'a' in ex
False
không phải là hành vi mong muốn.
Bây giờ, cách lười biếng điền vào tất cả các phương thức có thể được bắt nguồn từ những cái "cốt lõi" sẽ được trộn lẫn vào collections.abc.MutableMapping. Chỉ, nó không hoạt động ở đây. Tôi đoán bởi vì các phương thức trong câu hỏi ( __contains__trong ví dụ) đã được cung cấp bởi dict.
Có cách nào để có bánh của tôi và ăn nó? Một số phép thuật MutableMappingchỉ cho phép xem các phương thức mà tôi đã ghi đè để nó giới thiệu lại các phương thức khác dựa trên những phương pháp đó?
os._Environ.
MutableMapping. Xem trường hợp từ điển không nhạy cảm .