Hướng dẫn python dictionary wrapper - trình bao bọc từ điển python

Đây là một lớp đơn giản để lộ các khóa của một thuộc tính lớp, làm cho ít gõ hơn khi truy cập các giá trị từ điển. Lớp này cũng thực thi rằng hình dạng tổng thể của từ điển được duy trì.shape is maintained.

Việc sử dụng phổ biến của lớp này có thể được truy xuất và cập nhật các đối tượng mô hình từ các dịch vụ web (nghĩa là các dịch vụ web yên tĩnh) trong đó hình dạng của đối tượng mô hình phải được giữ nguyên giữa khi nó được truy xuất và khi nó được lưu.

Chẳng hạn, nếu được sử dụng với các yêu cầu, đầu ra của cuộc gọi JSON () của yêu cầu có thể được gói và đối tượng kết quả sẽ hoạt động theo cách tương tự như một đối tượng mô hình thực. Các giá trị có thể được thao tác và sau đó chưa được gửi lại để gửi lại máy chủ bằng cách sử dụng cuộc gọi Post () yêu cầu.

Sử dụng python_dict_wrapper khá đơn giản. Bạn bao bọc () một từ điển (hoặc danh sách). Sau đó, bạn thao túng và/hoặc truy vấn nó. Cuối cùng, bạn có thể mở () để lấy lại từ điển (hoặc danh sách).

Một ví dụ tầm thường:

import requests
from python_dict_wrapper import wrap, unwrap

actor_dict = requests.get('http://ficticious_actor_database_site.com/actors/c/carell_steve').json()

# Returns:
# {
#    "name": "Steve Carell",
#    "career": [{
#        "medium": "TV",
#        "title": "The Office"
#    }, {
#        "medium": "MOVIE",
#        "title": "Bruce Almighty"
#    }]
#}

actor = wrap(actor_dict)
actor.career[1].title = "Despicable Me"
unwrapped_actor = unwrap(actor)

requests.post('http://ficticious_actor_database_site.com/actors/c/carell_steve', data=unwrapped_actor)

Cài đặt

Python_dict_wrapper có sẵn trên PYPI, vì vậy cách dễ nhất để cài đặt nó là bằng cách sử dụng PIP:

$ pip install python-dict-wrapper

hàm make_wrapper (** kargs)

Make_Wrapper là một chức năng nhà máy để nhanh chóng khởi xướng một dictwrapper từ các đối số từ khóa. Nó dễ dàng hơn để chứng minh:

>>> from python_dict_wrapper import make_wrapper
>>>
>>> person = make_wrapper(first_name='Steve', last_name='Carell', occupation='actor')
>>> person
<DictWrapper: {'first_name': 'Steve', 'last_name': 'Carell', 'occupation': 'actor'}>
>>> person.last_name
'Carell'

Chức năng bọc (dữ liệu, nghiêm ngặt = false, key_prefix = none, mutable = true)

Wrap là một chức năng nhà máy để tạo ra một dictwrapper hoặc một người lập tên. Nó có một đối số bắt buộc và ba đối số tùy chọn:

  • Dữ liệu - Từ điển Python hoặc danh sách các từ điển cần được gói. Nếu dữ liệu là từ điển, phương thức này sẽ trả về một thể hiện DictWrapper. Nếu đó là danh sách, chức năng sẽ trả về một phiên bản ListWrapper. Lập luận này là bắt buộc.
  • nghiêm ngặt - một boolean tùy chọn cho biết liệu trình bao bọc có nên thực thi các loại khi đặt giá trị thuộc tính hay không.
  • key_prefix - một chuỗi hoặc danh sách các chuỗi chứa các ký tự mà các phím từ điển nên được đặt trước trước khi chúng trở thành thuộc tính.
  • METABLE - Một boolean cho biết liệu DictWapper có thể thay đổi hay không.

Đây là một chức năng tiện lợi khi bạn có một đối tượng dữ liệu và không muốn kiểm tra xem đó là từ điển hoặc danh sách.

>>> from python_dict_wrapper import wrap
>>>
>>> person_dict = {'first_name': 'Steve', 'last_name': 'Carell', 'occupation': 'actor'}
>>>
>>> person = wrap(person_dict)
>>>
>>> person
<DictWrapper: {'first_name': 'Steve', 'last_name': 'Carell', 'occupation': 'actor'}>
>>> person.occupation
'actor'

chức năng Unwrap (wrapping_item)

Hàm Unwrap sẽ trả về mục gốc được gói.

>>> from python_dict_wrapper import wrap, unwrap
>>> data_dict = {'first_name': 'Steve', 'last_name': 'Carell'}
>>> id(data_dict)

>>> wrapped_data_dict = wrap(data_dict)
>>> id(wrapped_data_dict)
4498248224
>>> wrapped_data_dict
<python_dict_wrapper.DictWrapper object at 0x10c1dd220>
>>> unwrapped_data_dict = unwrap(wrapped_data_dict)
>>> unwrapped_data_dict is data_dict
True
>>> unwrapped_data_dict
{'first_name': 'Steve', 'last_name': 'Carell'}

Chức năng Unwrap sẽ hoạt động trên cả hai mục DictWrapper cũng như các mục ListWrapper. Nếu mục được chuyển cho Unwrap không phải là một DictWrapper hoặc một ListWrapper, Unwrap sẽ chỉ trả lại vật phẩm không bị ảnh hưởng.

Các đối tượng Dictwrapper thao túng từ điển ban đầu mà chúng bao bọc vì vậy không cần thiết về mặt kỹ thuật là không cần thiết. Điều đó nói rằng, Unwrap có sẵn trong trường hợp một tham chiếu đến từ điển ban đầu bị mất hoặc đi ra khỏi phạm vi.

function add_attribute (wrapping_item, us ấy

Hàm add_attribution có thể được sử dụng để thêm một thuộc tính vào một dictwrapper sau khi nó được khởi tạo. Nó có thể được sử dụng nếu từ điển ban đầu không còn có sẵn.

>>> from python_dict_wrapper import wrap, add_attribute
>>> auth_config = wrap({'username': '', 'password': 'itza!secret'})
>>> add_attribute(auth_config, 'host', 'ldap.doe.com')
>>> auth_config.host
'ldap.doe.com'

chức năng del_attribut (wrapping_item, usil_name)

Ngược lại, DEL_Attribution loại bỏ một thuộc tính hiện có khỏi một DictWrapper hiện có. Del_attribution sẽ trả về giá trị cuối cùng của thuộc tính trước khi bị xóa.

>>> from python_dict_wrapper import wrap, del_attribute
>>> auth_config = wrap({'username': '', 'password': 'itza!secret'})
>>> del_attribute(auth_config, 'password')
'itza!secret'
>>> hasattr(auth_config, 'password')
False

lớp DictWrapper (dữ liệu, nghiêm ngặt = false, key_prefix = none, mutable = true)

Giống như hàm bọc, mỗi phiên bản DictWrapper có một đối số bắt buộc và ba đối số tùy chọn:

  • Dict - Một từ điển Python mà trình bao bọc sẽ sử dụng làm nguồn. Lập luận này là bắt buộc.
  • nghiêm ngặt - một boolean tùy chọn cho biết liệu trình bao bọc có nên thực thi các loại khi đặt giá trị thuộc tính hay không.
  • key_prefix - một chuỗi hoặc danh sách các chuỗi chứa các ký tự mà các phím từ điển nên được đặt trước trước khi chúng trở thành thuộc tính.
  • METABLE - Một boolean cho biết liệu DictWapper có thể thay đổi hay không.

Đây là một chức năng tiện lợi khi bạn có một đối tượng dữ liệu và không muốn kiểm tra xem đó là từ điển hoặc danh sách.

chức năng Unwrap (wrapping_item)

Hàm Unwrap sẽ trả về mục gốc được gói.

Chức năng Unwrap sẽ hoạt động trên cả hai mục DictWrapper cũng như các mục ListWrapper. Nếu mục được chuyển cho Unwrap không phải là một DictWrapper hoặc một ListWrapper, Unwrap sẽ chỉ trả lại vật phẩm không bị ảnh hưởng.

>>> address.street
'221B Baker Street'
>>> address.city
'London'
>>> address.country
'UK'

Các đối tượng Dictwrapper thao túng từ điển ban đầu mà chúng bao bọc vì vậy không cần thiết về mặt kỹ thuật là không cần thiết. Điều đó nói rằng, Unwrap có sẵn trong trường hợp một tham chiếu đến từ điển ban đầu bị mất hoặc đi ra khỏi phạm vi.

>>> address.country = "United Kingdom"
>>> address.country
'United Kingdom'

function add_attribute (wrapping_item, us ấy

$ pip install python-dict-wrapper
0

Hàm add_attribution có thể được sử dụng để thêm một thuộc tính vào một dictwrapper sau khi nó được khởi tạo. Nó có thể được sử dụng nếu từ điển ban đầu không còn có sẵn.

$ pip install python-dict-wrapper
1

Phương pháp

Các trường hợp dictwrapper có hai phương thức: to_json () và to_dict ().

to_json(pretty=False)

Chuyển đổi các giá trị từ điển thành chuỗi JSON. Nếu đối số đẹp được đặt thành TRUE, JSON được trả lại sẽ được nhiều thứ và được thụt vào với 4 ký tự. Nếu đó là sai, JSON được trả lại sẽ là một dòng văn bản.

to_dict()

Chuyển đổi Dictwrapper trở lại từ điển Python.

Làm tổ

Các trường hợp DictWrapper sẽ có thể xử lý các từ điển và danh sách lồng nhau mà không có vấn đề gì. Nó tự động kết thúc mọi từ điển lồng nhau trong các trường hợp DictWrapper của riêng họ cho bạn.

$ pip install python-dict-wrapper
2

Lớp ListWrapper (dữ liệu, nghiêm ngặt = false, key_prefix = none, mutable = true)

ListWrapper là phiên bản "danh sách" của DictWrapper. Nó được sử dụng bởi DictWrapper khi các danh sách làm tổ trong các giá trị từ điển. Listwrapper là một lớp con của danh sách Python tích hợp và hoạt động gần như chính xác giống như một danh sách Python với một ngoại lệ. Khi lấy các mục ra khỏi danh sách nếu mục là từ điển, nó sẽ bọc nó trong một dictwrapper. Nếu mục trong câu hỏi là một danh sách Python, nó sẽ bọc nó trong một danh sách khác.

$ pip install python-dict-wrapper
3

Tính đột biến

Nếu DictWrapper được khởi tạo với Retable được đặt thành True (mặc định), DictWrapper sẽ bị thay đổi, có nghĩa là thuộc tính có thể được thay đổi. Tuy nhiên, nếu có thể thay đổi được đặt thành sai khi dictwrapper được khởi tạo, nó sẽ là bất biến. Bạn sẽ không thể thay đổi bất kỳ thuộc tính nào (hoặc thuộc tính lồng nhau). Bất kỳ người lập danh sách nào kết quả từ các danh sách trong Dicting Dicting cũng sẽ là bất biến. Bạn sẽ không thể thêm/loại bỏ khỏi chúng.

$ pip install python-dict-wrapper
4

Màn biểu diễn

Các trường hợp Dictwrapper và Listwrapper Lazy Đánh giá trên các danh sách/danh sách ban đầu mà chúng được đưa ra khi được bọc. Kết quả là hiệu suất của các lớp này nên gần giống như các đối tác bản địa của họ.