विषय पर बढ़ें

Visual Studio Code

पाइडेंटिक बॉक्स से बाहर किसी भी संपादक या आईडीई के साथ अच्छा काम करता है क्योंकि यह मानक पायथन प्रकार के एनोटेशन के शीर्ष पर बनाया गया है।

विज़ुअल स्टूडियो कोड (वीएस कोड) का उपयोग करते समय, कुछ अतिरिक्त संपादक सुविधाएँ समर्थित हैं, जो PyCharm प्लगइन द्वारा प्रदान की गई सुविधाओं के बराबर हैं।

इसका मतलब यह है कि आपके पास नए पाइडेंटिक मॉडल उदाहरण बनाते समय भी स्वत: पूर्णता (या "इंटेलिसेन्स") और प्रकारों और आवश्यक तर्कों के लिए त्रुटि जांच होगी।

pydantic autocompletion in VS Code

वीएस कोड कॉन्फ़िगर करें

इन सुविधाओं का लाभ उठाने के लिए, आपको यह सुनिश्चित करना होगा कि आपने अनुशंसित सेटिंग्स का उपयोग करके वीएस कोड को सही ढंग से कॉन्फ़िगर किया है।

यदि आपके पास एक अलग कॉन्फ़िगरेशन है, तो यहां चरणों का एक संक्षिप्त अवलोकन दिया गया है।

पाइलेंस स्थापित करें

आपको वीएस कोड के लिए पाइलेंस एक्सटेंशन का उपयोग करना चाहिए। यह पायथन के लिए अनुशंसित, अगली पीढ़ी का, आधिकारिक वीएस कोड प्लग-इन है।

पाइलेंस को डिफ़ॉल्ट रूप से वीएस कोड के लिए पायथन एक्सटेंशन के हिस्से के रूप में स्थापित किया गया है, इसलिए इसे शायद काम करना चाहिए। अन्यथा, आप दोबारा जांच कर सकते हैं कि यह आपके संपादक में स्थापित और सक्षम है।

अपना परिवेश कॉन्फ़िगर करें

फिर आपको यह सुनिश्चित करना होगा कि आपका संपादक आपके पायथन प्रोजेक्ट के लिए पायथन वातावरण (संभवतः एक आभासी वातावरण) जानता है।

यह वह वातावरण होगा जहां आपने पाइडेंटिक स्थापित किया था।

पाइलेंस कॉन्फ़िगर करें

डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ, आपको स्वत: पूर्णता के लिए समर्थन मिलेगा, लेकिन पाइलेंस प्रकार की त्रुटियों की जांच नहीं कर सकता है।

आप इन चरणों के साथ पाइलेंस से प्रकार की त्रुटि जांच सक्षम कर सकते हैं:

  • "उपयोगकर्ता सेटिंग्स" खोलें
  • Type Checking Mode खोजें
  • आपको नीचे एक विकल्प मिलेगा Python › Analysis: Type Checking Mode
  • इसे basic या strict पर सेट करें (डिफ़ॉल्ट रूप से यह off है)

Type Checking Mode set to strict in VS Code

अब आपको नए पाइडेंटिक मॉडल इंस्टेंस बनाते समय न केवल स्वत: पूर्णता मिलेगी, बल्कि आवश्यक तर्कों के लिए त्रुटि जांच भी होगी।

Required arguments error checks in VS Code

और आपको अमान्य डेटा प्रकारों के लिए त्रुटि जांच भी मिलेगी।

Invalid data types error checks in VS Code

!!! नोट "तकनीकी विवरण" पाइलेंस वीएस कोड एक्सटेंशन है, यह बंद स्रोत है, लेकिन उपयोग के लिए मुफ़्त है। नीचे, पाइलेंस पायराइट नामक एक ओपन सोर्स टूल (माइक्रोसॉफ्ट से भी) का उपयोग करता है जो सभी भारी सामान उठाता है।

You can read more about it in the [Pylance Frequently Asked Questions](https://github.com/microsoft/pylance-release/blob/main/FAQ.md#what-is-the-relationship-between-pylance-pyright-and-the-python-extension).

Mypy कॉन्फ़िगर करें

हो सकता है कि आप अपने संपादक में mypy त्रुटि जांच इनलाइन प्राप्त करने के लिए mypy को VS कोड में कॉन्फ़िगर करना चाहें (वैकल्पिक रूप से/पाइलेंस के अतिरिक्त)।

यदि आपने इसे कॉन्फ़िगर किया है, तो इसमें पाइडेंटिक मायपी प्लगइन द्वारा पाई गई त्रुटियाँ शामिल होंगी।

VS कोड में mypy सक्षम करने के लिए, निम्न कार्य करें:

  • "उपयोगकर्ता सेटिंग्स" खोलें
  • Mypy Enabled खोजें
  • आपको नीचे एक विकल्प मिलेगा Python › Linting: Mypy Enabled
  • बॉक्स को चेक करें (डिफ़ॉल्ट रूप से यह अनचेक है)

mypy enabled in VS Code

युक्तियाँ और चालें

पाइडेंटिक के साथ वीएस कोड का उपयोग करते समय आपके डेवलपर अनुभव को बेहतर बनाने के लिए यहां कुछ अतिरिक्त युक्तियां और युक्तियां दी गई हैं।

सख्त त्रुटियाँ

जिस तरह से यह अतिरिक्त संपादक समर्थन काम करता है वह यह है कि पाइलेंस आपके पाइडेंटिक मॉडल के साथ ऐसा व्यवहार करेगा जैसे कि वे पायथन के शुद्ध dataclasses थे।

और यह एक नया पाइडेंटिक मॉडल उदाहरण बनाते समय तर्कों में पारित डेटा प्रकारों के बारे में सख्त प्रकार की त्रुटि जांच दिखाएगा।

इस उदाहरण में आप देख सकते हैं कि यह दर्शाता है कि '23' का एक str तर्क age के लिए मान्य int नहीं है।

VS Code strict type errors

यह age=23 age='23' 23 की अपेक्षा करेगा।

फिर भी, डिज़ाइन और पाइडेंटिक की मुख्य विशेषताओं में से एक यह है कि यह डेटा प्रकारों के साथ बहुत उदार है।

यह वास्तव में '23' मान वाले str स्वीकार करेगा और इसे 23 मान वाले int में बदल देगा।

ये सख्त त्रुटि जाँचें अधिकांश समय बहुत उपयोगी होती हैं और आपको कई बगों का शीघ्र पता लगाने में मदद कर सकती हैं। लेकिन ऐसे मामले भी हैं, जैसे कि age='23' , जहां "गलत सकारात्मक" त्रुटि की रिपोर्ट करना असुविधाजनक हो सकता है।


त्रुटि और प्रकारों में अंतर दिखाने के लिए age='23' वाला उपरोक्त उदाहरण जानबूझकर सरल है।

लेकिन अधिक सामान्य मामले जहां ये सख्त त्रुटियां असुविधाजनक होंगी, वे अधिक परिष्कृत डेटा प्रकारों का उपयोग करते समय होंगी, जैसे datetime फ़ील्ड के लिए int मान, या Pydantic उप-मॉडल के लिए dict मान।

उदाहरण के लिए, यह पाइडेंटिक के लिए मान्य है:

from pydantic import BaseModel


class Knight(BaseModel):
    title: str
    age: int
    color: str = 'blue'


class Quest(BaseModel):
    title: str
    knight: Knight


quest = Quest(
    title='To seek the Holy Grail', knight={'title': 'Sir Lancelot', 'age': 23}
)

फ़ील्ड knight का प्रकार क्लास Knight (एक पाइडेंटिक मॉडल) के साथ घोषित किया गया है और कोड इसके बजाय एक शाब्दिक dict पारित कर रहा है। यह अभी भी पाइडेंटिक के लिए मान्य है, और dict स्वचालित रूप से Knight इंस्टेंस में परिवर्तित हो जाएगा।

फिर भी, इसे एक प्रकार की त्रुटि के रूप में पहचाना जाएगा:

VS Code strict type errors with model

उन मामलों में, बहुत विशिष्ट स्थानों में सख्त त्रुटियों को अक्षम या अनदेखा करने के कई तरीके हैं, जबकि उन्हें बाकी कोड में संरक्षित किया जाता है।

इसे प्राप्त करने के लिए नीचे कई तकनीकें दी गई हैं।

एक पंक्ति में प्रकार की जाँच अक्षम करें

आप एक टिप्पणी का उपयोग करके किसी विशिष्ट पंक्ति के लिए त्रुटियों को अक्षम कर सकते हैं:

# type: ignore

या (पाइलेंस/पाइराइट के लिए विशिष्ट होने के लिए):

# pyright: ignore

( पाइराइट पाइलेंस द्वारा उपयोग किया जाने वाला भाषा सर्वर है।)

age='23' वाले उदाहरण पर वापस आते हुए, यह होगा:

from pydantic import BaseModel


class Knight(BaseModel):
    title: str
    age: int
    color: str = 'blue'


lancelot = Knight(title='Sir Lancelot', age='23')  # pyright: ignore

इस तरह पाइलेंस और मायपी उस पंक्ति में त्रुटियों को अनदेखा कर देंगे।

पेशेवर : त्रुटियों को दूर करने के लिए यह उस पंक्ति में एक सरल परिवर्तन है।

विपक्ष : उस पंक्ति में कोई अन्य त्रुटि भी छोड़ दी जाएगी, जिसमें प्रकार की जांच, गलत वर्तनी वाले तर्क, आवश्यक तर्क प्रदान नहीं किए गए आदि शामिल हैं।

किसी वेरिएबल के प्रकार को ओवरराइड करें

आप जिस मान का उपयोग करना चाहते हैं उसके साथ एक वेरिएबल भी बना सकते हैं और Any के साथ उसके प्रकार को स्पष्ट रूप से घोषित कर सकते हैं।

from typing import Any

from pydantic import BaseModel


class Knight(BaseModel):
    title: str
    age: int
    color: str = 'blue'


age_str: Any = '23'
lancelot = Knight(title='Sir Lancelot', age=age_str)

इस तरह से पाइलेंस और मायपी वेरिएबल age_str व्याख्या इस तरह करेंगे जैसे कि उन्हें इसके प्रकार का पता नहीं था, यह जानने के बजाय कि इसमें एक प्रकार का str है जब एक int अपेक्षित था (और फिर संबंधित त्रुटि दिखा रहा था)।

पेशेवर : त्रुटियों को केवल एक विशिष्ट मान के लिए अनदेखा किया जाएगा, और आपको अन्य तर्कों के लिए अभी भी कोई अतिरिक्त त्रुटियां दिखाई देंगी।

विपक्ष : इसमें प्रत्येक तर्क के लिए एक नई पंक्ति में Any और एक नया चर आयात करने की आवश्यकता होती है, जिसमें त्रुटियों को अनदेखा करने की आवश्यकता होती है।

cast के साथ मान के प्रकार को ओवरराइड करें

पिछले उदाहरण के समान विचार को cast() की सहायता से एक ही पंक्ति में रखा जा सकता है।

इस तरह, किसी अन्य वेरिएबल की आवश्यकता के बिना, मान के प्रकार की घोषणा को इनलाइन ओवरराइड कर दिया जाता है।

from typing import Any, cast

from pydantic import BaseModel


class Knight(BaseModel):
    title: str
    age: int
    color: str = 'blue'


lancelot = Knight(title='Sir Lancelot', age=cast(Any, '23'))

cast(Any, '23') मूल्य को प्रभावित नहीं करता है, यह अभी भी सिर्फ '23' है, लेकिन अब Pylance और mypy मान लेंगे कि यह Any प्रकार का है, जिसका अर्थ है, वे ऐसे कार्य करेंगे जैसे कि उन्हें प्रकार पता नहीं था मूल्य का.

तो, यह अतिरिक्त चर के बिना, पिछले उदाहरण के बराबर है।

पेशेवर : त्रुटियों को केवल एक विशिष्ट मान के लिए अनदेखा किया जाएगा, और आपको अन्य तर्कों के लिए अभी भी कोई अतिरिक्त त्रुटियां दिखाई देंगी। अतिरिक्त चरों की कोई आवश्यकता नहीं है.

विपक्ष : इसमें Any और cast आयात करने की आवश्यकता होती है, और यदि आप cast() उपयोग करने के आदी नहीं हैं, तो यह पहली बार में अजीब लग सकता है।

वर्ग तर्कों में कॉन्फ़िगर करें

पाइडेंटिक के पास मॉडल कॉन्फ़िगरेशन का एक समृद्ध सेट उपलब्ध है।

ये कॉन्फ़िगरेशन प्रत्येक मॉडल पर आंतरिक class Config में सेट किए जा सकते हैं:

from pydantic import BaseModel


class Knight(BaseModel):
    model_config = dict(frozen=True)
    title: str
    age: int
    color: str = 'blue'

या मॉडल वर्ग को परिभाषित करते समय कीवर्ड तर्क के रूप में पारित किया गया:

from pydantic import BaseModel


class Knight(BaseModel, frozen=True):
    title: str
    age: int
    color: str = 'blue'

frozen विशिष्ट कॉन्फ़िगरेशन (बीटा में) का एक विशेष अर्थ है।

यह अन्य कोड को मॉडल इंस्टेंस बनने के बाद उसे बदलने से रोकता है, इसे "जमे हुए" रखता है।

frozen=True (वर्ग परिभाषा में कीवर्ड तर्कों के साथ) घोषित करने के लिए दूसरे संस्करण का उपयोग करते समय, पाइलेंस इसका उपयोग आपके कोड की जाँच करने और त्रुटियों का पता लगाने में मदद करने के लिए कर सकता है जब कोई चीज़ "फ्रोज़न" मॉडल में मान सेट करने का प्रयास कर रही हो।

VS Code strict type errors with model

Field के साथ एक डिफ़ॉल्ट जोड़ना

यह अनुमान लगाने के लिए कि फ़ील्ड वैकल्पिक है, Pylance/pyright को default Field के लिए एक कीवर्ड तर्क की आवश्यकता होती है।

from pydantic import BaseModel, Field


class Knight(BaseModel):
    title: str = Field(default='Sir Lancelot')  # this is okay
    age: int = Field(
        23
    )  # this works fine at runtime but will case an error for pyright


lance = Knight()  # error: Argument missing for parameter "age"

यह डेटाक्लास ट्रांसफ़ॉर्म की एक सीमा है और इसे पाइडेंटिक में ठीक नहीं किया जा सकता है।

टेक्निकल डिटेल

!!! चेतावनी एक पाइडेंटिक उपयोगकर्ता के रूप में, आपको नीचे दिए गए विवरण की आवश्यकता नहीं है। बेझिझक इस अनुभाग के शेष भाग को छोड़ दें।

These details are only useful for other library authors, etc.

यह अतिरिक्त संपादक समर्थन डेटाक्लास ट्रांसफ़ॉर्म (पीईपी 681) के लिए प्रस्तावित ड्राफ्ट मानक को लागू करके काम करता है।

प्रस्तावित ड्राफ्ट मानक माइक्रोसॉफ्ट टीम के एरिक ट्रौट द्वारा लिखा गया है, जो ओपन सोर्स पैकेज पाइराइट के लेखक हैं (वीएस कोड में पायथन समर्थन प्रदान करने के लिए पाइलेंस द्वारा उपयोग किया जाता है)।

मानक का उद्देश्य पाइडैंटिक और अन्य जैसे पुस्तकालयों को संपादकों और उपकरणों को यह बताने का एक तरीका प्रदान करना है कि उन्हें (संपादकों को) इन पुस्तकालयों (उदाहरण के लिए पाइडेंटिक) के साथ ऐसा व्यवहार करना चाहिए जैसे कि वे dataclasses थे, स्वत: पूर्णता, प्रकार की जांच आदि प्रदान करते हैं।

ड्राफ्ट मानक में पाइडेंटिक जैसे शुरुआती अपनाने वालों के लिए एक वैकल्पिक फॉर्म भी शामिल है, ताकि नए ड्राफ्ट मानक के समाप्त होने और स्वीकृत होने से पहले ही तुरंत इसके लिए समर्थन जोड़ा जा सके।

अल्टरनेट फॉर्म के साथ यह नया ड्राफ्ट मानक पहले से ही पाइराइट द्वारा समर्थित है, इसलिए इसका उपयोग वीएस कोड में पाइलेंस के माध्यम से किया जा सकता है।

चूँकि इसे पायथन के लिए एक आधिकारिक मानक के रूप में प्रस्तावित किया जा रहा है, अन्य संपादक भी इसके लिए आसानी से समर्थन जोड़ सकते हैं।

और पाइडेंटिक के समान अन्य पुस्तकालयों के लेखक भी तुरंत मानक को आसानी से अपना सकते हैं ("वैकल्पिक फॉर्म" का उपयोग करके) और इन अतिरिक्त संपादक सुविधाओं का लाभ प्राप्त कर सकते हैं।


本文总阅读量