प्रकार अनुकूलक
आपके पास ऐसे प्रकार हो सकते हैं जो BaseModel
नहीं हैं जिनके विरुद्ध आप डेटा सत्यापित करना चाहते हैं। या हो सकता है कि आप List[SomeModel]
सत्यापित करना चाहें, या उसे JSON पर डंप करना चाहें।
??? एपीआई "एपीआई दस्तावेज़ीकरण" pydantic.type_adapter.TypeAdapter
इस तरह के उपयोग के मामलों के लिए, Pydantic TypeAdapter
प्रदान करता है, जिसका उपयोग BaseModel
बनाने की आवश्यकता के बिना प्रकार सत्यापन, क्रमबद्धता और JSON स्कीमा पीढ़ी के लिए किया जा सकता है।
एक TypeAdapter
उदाहरण उन प्रकारों के लिए BaseModel
इंस्टेंस तरीकों से कुछ कार्यक्षमता को उजागर करता है जिनमें ऐसी विधियां नहीं हैं (जैसे डेटाक्लास, आदिम प्रकार, और अधिक):
from typing import List
from typing_extensions import TypedDict
from pydantic import TypeAdapter, ValidationError
class User(TypedDict):
name: str
id: int
user_list_adapter = TypeAdapter(List[User])
user_list = user_list_adapter.validate_python([{'name': 'Fred', 'id': '3'}])
print(repr(user_list))
#> [{'name': 'Fred', 'id': 3}]
try:
user_list_adapter.validate_python(
[{'name': 'Fred', 'id': 'wrong', 'other': 'no'}]
)
except ValidationError as e:
print(e)
"""
1 validation error for list[typed-dict]
0.id
Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='wrong', input_type=str]
"""
print(repr(user_list_adapter.dump_json(user_list)))
#> b'[{"name":"Fred","id":3}]'
!!! जानकारी " dump_json
bytes
लौटाता है " TypeAdapter
की dump_json
विधियां bytes
ऑब्जेक्ट लौटाती है, BaseModel
के लिए संबंधित विधि, model_dump_json
के विपरीत, जो एक str
लौटाती है। इस विसंगति का कारण यह है कि V1 में, मॉडल डंपिंग ने एक str प्रकार लौटाया, इसलिए इस व्यवहार को बैकवर्ड संगतता के लिए V2 में बनाए रखा गया है। BaseModel
मामले के लिए, bytes
str
प्रकारों के लिए बाध्य किया जाता है, लेकिन bytes
अक्सर वांछित अंत प्रकार होते हैं। इसलिए, V2 में नए TypeAdapter
वर्ग के लिए, रिटर्न प्रकार बस bytes
है, जिसे यदि वांछित हो तो आसानी से एक str
प्रकार के लिए मजबूर किया जा सकता है।
!!! नोट RootModel
के साथ उपयोग के मामलों में कुछ ओवरलैप के बावजूद, TypeAdapter
को BaseModel
आदि के फ़ील्ड निर्दिष्ट करने के लिए एक प्रकार के एनोटेशन के रूप में उपयोग नहीं किया जाना चाहिए।
डेटा को एक निर्दिष्ट प्रकार में पार्स करना¶
TypeAdapter
का उपयोग पाइडेंटिक मॉडल को अधिक तदर्थ तरीके से पॉप्युलेट करने के लिए पार्सिंग तर्क को लागू करने के लिए किया जा सकता है। यह फ़ंक्शन BaseModel.model_validate
के समान व्यवहार करता है, लेकिन मनमाने ढंग से Pydantic-संगत प्रकारों के साथ काम करता है।
यह विशेष रूप से तब उपयोगी होता है जब आप परिणामों को ऐसे प्रकार में पार्स करना चाहते हैं जो BaseModel
का प्रत्यक्ष उपवर्ग नहीं है। उदाहरण के लिए:
from typing import List
from pydantic import BaseModel, TypeAdapter
class Item(BaseModel):
id: int
name: str
# `item_data` could come from an API call, eg., via something like:
# item_data = requests.get('https://my-api.com/items').json()
item_data = [{'id': 1, 'name': 'My Item'}]
items = TypeAdapter(List[Item]).validate_python(item_data)
print(items)
#> [Item(id=1, name='My Item')]
TypeAdapter
डेटा को किसी भी प्रकार में पार्स करने में सक्षम है जिसे Pydantic BaseModel
के फ़ील्ड के रूप में संभाल सकता है।
!!! जानकारी "प्रदर्शन संबंधी विचार" TypeAdapter
का एक उदाहरण बनाते समय, प्रदान किए गए प्रकार का विश्लेषण किया जाना चाहिए और एक पाइडेंटिक-कोर स्कीमा में परिवर्तित किया जाना चाहिए। यह कुछ गैर-तुच्छ ओवरहेड के साथ आता है, इसलिए किसी दिए गए प्रकार के लिए केवल एक बार TypeAdapter
बनाने और इसे लूप या अन्य प्रदर्शन-महत्वपूर्ण कोड में पुन: उपयोग करने की अनुशंसा की जाती है।
本文总阅读量次