Visual Studio Code
Pydantic funktioniert sofort gut mit jedem Editor oder jeder IDE, da es auf Standardanmerkungen vom Typ Python basiert.
Bei der Verwendung von Visual Studio Code (VS Code) werden einige zusätzliche Editorfunktionen unterstützt, vergleichbar mit denen des PyCharm-Plugins .
Dies bedeutet, dass Sie auch beim Erstellen neuer Pydantic-Modellinstanzen über eine automatische Vervollständigung (oder „IntelliSense“) und Fehlerprüfungen für Typen und erforderliche Argumente verfügen.
Konfigurieren Sie VS-Code¶
Um diese Funktionen nutzen zu können, müssen Sie sicherstellen, dass Sie VS Code korrekt konfigurieren und die empfohlenen Einstellungen verwenden.
Falls Sie eine andere Konfiguration haben, finden Sie hier eine kurze Übersicht über die Schritte.
Installieren Sie Pylance¶
Sie sollten die Pylance- Erweiterung für VS Code verwenden. Es handelt sich um das empfohlene offizielle VS-Code-Plug-in der nächsten Generation für Python.
Pylance wird standardmäßig als Teil der Python-Erweiterung für VS Code installiert, daher sollte es wahrscheinlich einfach funktionieren. Andernfalls können Sie überprüfen, ob es in Ihrem Editor installiert und aktiviert ist.
Konfigurieren Sie Ihre Umgebung¶
Dann müssen Sie sicherstellen, dass Ihr Redakteur die Python-Umgebung (wahrscheinlich eine virtuelle Umgebung) für Ihr Python-Projekt kennt.
Dies wäre die Umgebung, in der Sie Pydantic installiert haben.
Konfigurieren Sie Pylance¶
Mit den Standardkonfigurationen erhalten Sie Unterstützung für die automatische Vervollständigung, Pylance prüft jedoch möglicherweise nicht auf Typfehler.
Mit den folgenden Schritten können Sie Typfehlerprüfungen von Pylance aktivieren:
- Öffnen Sie die „Benutzereinstellungen“
- Suchen Sie nach
Type Checking Mode
- Unten finden Sie eine Option
Python › Analysis: Type Checking Mode
- Stellen Sie es auf
basic
oderstrict
ein (standardmäßig ist esoff
).
Jetzt erhalten Sie beim Erstellen neuer Pydantic-Modellinstanzen nicht nur eine automatische Vervollständigung, sondern auch Fehlerprüfungen für erforderliche Argumente .
Außerdem erhalten Sie Fehlerprüfungen für ungültige Datentypen .
!!! Hinweis „Technische Details“ Pylance ist die VS-Code-Erweiterung, es ist Closed Source, kann aber kostenlos verwendet werden. Darunter verwendet Pylance ein Open-Source-Tool (ebenfalls von Microsoft) namens Pyright , das die ganze schwere Arbeit übernimmt.
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).
Konfigurieren Sie mypy¶
Möglicherweise möchten Sie mypy auch in VS Code konfigurieren, um mypy-Fehlerprüfungen inline in Ihrem Editor zu erhalten (alternativ/zusätzlich zu Pylance).
Hierzu zählen auch die vom Pydantic Mypy-Plugin erkannten Fehler, wenn Sie es konfiguriert haben.
Gehen Sie wie folgt vor, um mypy in VS Code zu aktivieren:
- Öffnen Sie die „Benutzereinstellungen“
- Suchen Sie nach
Mypy Enabled
- Unten finden Sie eine Option
Python › Linting: Mypy Enabled
- Aktivieren Sie das Kontrollkästchen (standardmäßig ist es deaktiviert).
Tipps und Tricks¶
Hier finden Sie einige zusätzliche Tipps und Tricks, um Ihr Entwicklererlebnis bei der Verwendung von VS Code mit Pydantic zu verbessern.
Strenge Fehler¶
Diese zusätzliche Editor-Unterstützung funktioniert so, dass Pylance Ihre Pydantic-Modelle so behandelt, als wären sie reine Python- dataclasses
.
Außerdem werden beim Erstellen einer neuen Pydantic-Modellinstanz strenge Typfehlerprüfungen für die in Argumenten übergebenen Datentypen angezeigt.
In diesem Beispiel können Sie sehen, dass ein str
von '23'
kein gültiger int
für das Argument age
ist.
Es würde age=23
anstelle von age='23'
erwarten.
Dennoch besteht das Design und eines der Hauptmerkmale von Pydantic darin, dass es sehr nachsichtig mit Datentypen umgeht .
Es akzeptiert tatsächlich den str
mit dem Wert '23'
und wandelt ihn in einen int
mit dem Wert 23
um.
Diese strengen Fehlerprüfungen sind in den meisten Fällen sehr nützlich und können Ihnen dabei helfen , viele Fehler frühzeitig zu erkennen . Aber es gibt Fälle, wie etwa bei age='23'
, in denen es unangenehm sein könnte, einen „falsch positiven“ Fehler zu melden.
Dieses Beispiel oben mit age='23'
ist absichtlich einfach gehalten, um den Fehler und die Unterschiede in den Typen zu verdeutlichen.
Aber häufigere Fälle, in denen diese strengen Fehler unpraktisch wären, wären die Verwendung anspruchsvollerer Datentypen, wie etwa int
Werte für datetime
Uhrzeitfelder oder dict
-Werte für Pydantic-Untermodelle.
Dies gilt beispielsweise für Pydantic:
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}
)
Der Typ des knight
wird mit der Klasse Knight
(einem Pydantic-Modell) deklariert und der Code übergibt stattdessen ein wörtliches dict
. Dies gilt weiterhin für Pydantic und das dict
würde automatisch in eine Knight
-Instanz umgewandelt.
Dennoch würde es als Typfehler erkannt werden:
In diesen Fällen gibt es mehrere Möglichkeiten, strikte Fehler an ganz bestimmten Stellen zu deaktivieren oder zu ignorieren, sie aber dennoch im Rest des Codes beizubehalten.
Im Folgenden finden Sie verschiedene Techniken, um dies zu erreichen.
Typprüfungen in einer Zeile deaktivieren¶
Sie können die Fehler für eine bestimmte Zeile mit einem Kommentar deaktivieren:
# type: ignore
oder (um spezifisch auf pylance/pyright zu sein):
# pyright: ignore
( Pyright ist der von Pylance verwendete Sprachserver.)
Wenn wir auf das Beispiel mit age='23'
zurückkommen, wäre es:
from pydantic import BaseModel
class Knight(BaseModel):
title: str
age: int
color: str = 'blue'
lancelot = Knight(title='Sir Lancelot', age='23') # pyright: ignore
Auf diese Weise ignorieren Pylance und Mypy Fehler in dieser Zeile.
Vorteile : Es ist eine einfache Änderung in dieser Zeile, um dort Fehler zu beseitigen.
Nachteile : Alle anderen Fehler in dieser Zeile werden ebenfalls weggelassen, einschließlich Typprüfungen, falsch geschriebene Argumente, nicht angegebene erforderliche Argumente usw.
Überschreiben Sie den Typ einer Variablen¶
Sie können auch eine Variable mit dem Wert erstellen, den Sie verwenden möchten, und ihren Typ explizit mit Any
deklarieren.
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)
Auf diese Weise interpretieren Pylance und mypy die Variable age_str
so, als ob sie ihren Typ nicht kennen würden, anstatt zu wissen, dass sie einen Typ str
hat, wenn ein int
erwartet wurde (und dann den entsprechenden Fehler anzuzeigen).
Vorteile : Fehler werden nur für einen bestimmten Wert ignoriert und Sie sehen weiterhin alle zusätzlichen Fehler für die anderen Argumente.
Nachteile : Für jedes Argument, das Fehler ignorieren muss, muss Any
und eine neue Variable in einer neuen Zeile importiert werden.
Überschreiben Sie den Typ eines Werts mit cast
¶
Die gleiche Idee aus dem vorherigen Beispiel kann mit Hilfe von cast()
in die gleiche Zeile gebracht werden.
Auf diese Weise wird die Typdeklaration des Werts inline überschrieben, ohne dass eine weitere Variable erforderlich ist.
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')
hat keinen Einfluss auf den Wert, er ist immer noch nur '23'
, aber jetzt gehen Pylance und mypy davon aus, dass es sich um den Typ Any
handelt, was bedeutet, dass sie so tun, als ob sie den Typ nicht kennen würden des Wertes.
Dies ist also das Äquivalent zum vorherigen Beispiel, ohne die zusätzliche Variable.
Vorteile : Fehler werden nur für einen bestimmten Wert ignoriert und Sie sehen weiterhin alle zusätzlichen Fehler für die anderen Argumente. Es sind keine zusätzlichen Variablen erforderlich.
Nachteile : Es erfordert den Import von Any
und cast
, und wenn Sie nicht daran gewöhnt sind, cast()
zu verwenden, könnte es zunächst seltsam erscheinen.
Config in Klassenargumenten¶
Pydantic verfügt über einen umfangreichen Satz an Modellkonfigurationen.
Diese Konfigurationen können in einer internen class Config
für jedes Modell festgelegt werden:
from pydantic import BaseModel
class Knight(BaseModel):
model_config = dict(frozen=True)
title: str
age: int
color: str = 'blue'
oder als Schlüsselwortargumente beim Definieren der Modellklasse übergeben:
from pydantic import BaseModel
class Knight(BaseModel, frozen=True):
title: str
age: int
color: str = 'blue'
Die spezifische frozen
Konfiguration (in der Betaversion) hat eine besondere Bedeutung.
Dadurch wird verhindert, dass anderer Code eine Modellinstanz nach der Erstellung ändert, sodass sie „eingefroren“ bleibt.
Wenn Sie die zweite Version verwenden, um frozen=True
zu deklarieren (mit Schlüsselwortargumenten in der Klassendefinition), kann Pylance sie verwenden, um Ihnen beim Einchecken Ihres Codes zu helfen und Fehler zu erkennen, wenn etwas versucht, Werte in einem Modell festzulegen, das „eingefroren“ ist.
Mit Field
einen Standard hinzufügen¶
Pylance/pyright erfordert, dass default
ein Schlüsselwortargument für Field
ist, um daraus schließen zu können, dass das Feld optional ist.
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"
Dies ist eine Einschränkung von Datenklassentransformationen und kann in Pydantic nicht behoben werden.
Technische Details¶
!!! Warnung Als Pydantic-Benutzer benötigen Sie die folgenden Details nicht. Sie können den Rest dieses Abschnitts gerne überspringen.
These details are only useful for other library authors, etc.
Diese zusätzliche Editorunterstützung funktioniert durch die Implementierung des vorgeschlagenen Standardentwurfs für Dataclass Transform (PEP 681) .
Der vorgeschlagene Standardentwurf wurde von Eric Traut vom Microsoft-Team geschrieben, dem gleichen Autor des Open-Source-Pakets Pyright (das von Pylance zur Bereitstellung von Python-Unterstützung in VS Code verwendet wird).
Ziel des Standards ist es, Bibliotheken wie Pydantic und anderen eine Möglichkeit zu bieten, Editoren und Tools mitzuteilen, dass sie (die Editoren) diese Bibliotheken (z. B. Pydantic) so behandeln sollen, als wären sie dataclasses
, die automatische Vervollständigung, Typprüfungen usw. bereitstellen.
Der Standardentwurf enthält auch ein alternatives Formular für Early Adopters wie Pydantic, um sofort Unterstützung hinzuzufügen, noch bevor der neue Standardentwurf fertiggestellt und genehmigt ist.
Dieser neue Standardentwurf mit der alternativen Form wird bereits von Pyright unterstützt, sodass er über Pylance in VS Code verwendet werden kann.
Da es als offizieller Standard für Python vorgeschlagen wird, können auch andere Editoren problemlos Unterstützung dafür hinzufügen.
Und auch Autoren anderer Pydantic-ähnlicher Bibliotheken können den Standard problemlos sofort übernehmen (mithilfe der „Alternate Form“) und die Vorteile dieser zusätzlichen Editorfunktionen nutzen.
本文总阅读量次