Lewati ke isi

Visual Studio Code

Pydantic berfungsi baik dengan editor atau IDE apa pun karena dibuat berdasarkan anotasi tipe Python standar.

Saat menggunakan Visual Studio Code (VS Code) , ada beberapa fitur editor tambahan yang didukung, sebanding dengan yang disediakan oleh plugin PyCharm .

Ini berarti Anda akan memiliki pelengkapan otomatis (atau "IntelliSense") dan pemeriksaan kesalahan untuk tipe dan argumen yang diperlukan bahkan saat membuat instance model Pydantic baru.

pydantic autocompletion in VS Code

Konfigurasikan Kode VS

Untuk memanfaatkan fitur ini, Anda perlu memastikan bahwa Anda mengonfigurasi VS Code dengan benar, menggunakan pengaturan yang disarankan.

Jika Anda memiliki konfigurasi yang berbeda, berikut ikhtisar singkat langkah-langkahnya.

Instal Pilance

Anda harus menggunakan ekstensi Pylance untuk VS Code. Ini adalah plug-in VS Code resmi generasi berikutnya yang direkomendasikan untuk Python.

Pylance diinstal sebagai bagian dari Ekstensi Python untuk VS Code secara default, jadi mungkin seharusnya berfungsi. Jika tidak, Anda dapat memeriksa ulang apakah sudah terinstal dan diaktifkan di editor Anda.

Konfigurasikan lingkungan Anda

Maka Anda perlu memastikan editor Anda mengetahui lingkungan Python (mungkin lingkungan virtual) untuk proyek Python Anda.

Ini akan menjadi lingkungan tempat Anda menginstal Pydantic.

Konfigurasikan Pilance

Dengan konfigurasi default, Anda akan mendapatkan dukungan untuk pelengkapan otomatis, namun Pylance mungkin tidak memeriksa kesalahan ketik.

Anda dapat mengaktifkan pemeriksaan kesalahan ketik dari Pylance dengan langkah-langkah berikut:

  • Buka "Pengaturan Pengguna"
  • Cari Type Checking Mode
  • Anda akan menemukan opsi di bawah Python › Analysis: Type Checking Mode
  • Setel ke basic atau strict (secara default off )

Type Checking Mode set to strict in VS Code

Sekarang Anda tidak hanya akan mendapatkan pelengkapan otomatis saat membuat contoh model Pydantic baru tetapi juga pemeriksaan kesalahan untuk argumen yang diperlukan .

Required arguments error checks in VS Code

Dan Anda juga akan mendapatkan pemeriksaan kesalahan untuk tipe data yang tidak valid .

Invalid data types error checks in VS Code

!!! catatan "Detail Teknis" Pylance adalah ekstensi VS Code, sumbernya tertutup, tetapi gratis untuk digunakan. Di bawahnya, Pylance menggunakan alat open source (juga dari Microsoft) bernama Pyright yang melakukan semua pekerjaan berat.

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).

Konfigurasikan mypy

Anda mungkin juga ingin mengonfigurasi mypy di VS Code untuk mendapatkan pemeriksaan kesalahan mypy sebaris di editor Anda (sebagai alternatif/tambahan ke Pylance).

Ini termasuk kesalahan yang terdeteksi oleh plugin Pydantic mypy , jika Anda mengonfigurasinya.

Untuk mengaktifkan mypy di VS Code, lakukan hal berikut:

  • Buka "Pengaturan Pengguna"
  • Cari Mypy Enabled
  • Anda akan menemukan opsi di bawah Python › Linting: Mypy Enabled
  • Centang kotaknya (secara default tidak dicentang)

mypy enabled in VS Code

Tip dan trik

Berikut beberapa tip dan trik tambahan untuk meningkatkan pengalaman pengembang Anda saat menggunakan VS Code dengan Pydantic.

Kesalahan yang ketat

Cara kerja dukungan editor tambahan ini adalah Pylance akan memperlakukan model Pydantic Anda seolah-olah itu adalah dataclasses murni Python.

Dan itu akan menampilkan pemeriksaan kesalahan tipe yang ketat tentang tipe data yang diteruskan dalam argumen saat membuat instance model Pydantic baru.

Dalam contoh ini Anda dapat melihat bahwa ini menunjukkan bahwa str dari '23' bukan int yang valid untuk argumen age .

VS Code strict type errors

Diharapkan age=23 dari pada age='23' .

Namun demikian, desain, dan salah satu fitur utama Pydantic, adalah sangat lunak terhadap tipe data .

Itu benar-benar akan menerima str dengan nilai '23' dan akan mengubahnya menjadi int dengan nilai 23 .

Pemeriksaan kesalahan yang ketat ini sangat berguna pada sebagian besar waktu dan dapat membantu Anda mendeteksi banyak bug sejak dini . Namun ada beberapa kasus, seperti age='23' , yang dapat menimbulkan ketidaknyamanan karena melaporkan kesalahan "positif palsu".


Contoh di atas dengan age='23' sengaja dibuat sederhana, untuk menunjukkan kesalahan dan perbedaan jenisnya.

Namun kasus yang lebih umum di mana kesalahan ketat ini akan merepotkan adalah ketika menggunakan tipe data yang lebih canggih, seperti nilai int untuk bidang datetime , atau nilai dict untuk submodel Pydantic.

Misalnya, ini berlaku untuk 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}
)

Tipe knight lapangan dideklarasikan dengan kelas Knight (model Pydantic) dan kodenya meneruskan dict literal. Ini masih berlaku untuk Pydantic, dan dict akan secara otomatis dikonversi ke instance Knight .

Namun demikian, ini akan terdeteksi sebagai kesalahan tipe:

VS Code strict type errors with model

Dalam kasus tersebut, ada beberapa cara untuk menonaktifkan atau mengabaikan kesalahan ketat di tempat yang sangat spesifik, sambil tetap menyimpannya di seluruh kode.

Berikut adalah beberapa teknik untuk mencapainya.

Nonaktifkan pemeriksaan tipe dalam satu baris

Anda dapat menonaktifkan kesalahan untuk baris tertentu menggunakan komentar:

# type: ignore

atau (khusus untuk pylance/pyright):

# pyright: ignore

( pyright adalah server bahasa yang digunakan oleh Pylance.).

kembali ke contoh dengan age='23' , hasilnya akan menjadi:

from pydantic import BaseModel


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


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

dengan begitu Pylance dan mypy akan mengabaikan kesalahan pada baris itu.

Kelebihan : ini adalah perubahan sederhana pada baris itu untuk menghilangkan kesalahan di sana.

Kontra : kesalahan lain pada baris tersebut juga akan dihilangkan, termasuk pemeriksaan jenis, argumen yang salah eja, argumen yang diperlukan tidak disediakan, dll.

Ganti tipe variabel

Anda juga dapat membuat variabel dengan nilai yang ingin Anda gunakan dan mendeklarasikan tipenya secara eksplisit dengan 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)

dengan cara itu Pylance dan mypy akan menafsirkan variabel age_str seolah-olah mereka tidak mengetahui tipenya, alih-alih mengetahui bahwa variabel tersebut memiliki tipe str ketika int diharapkan (dan kemudian menampilkan kesalahan yang sesuai).

Kelebihan : kesalahan akan diabaikan hanya untuk nilai tertentu, dan Anda masih akan melihat kesalahan tambahan untuk argumen lainnya.

Kontra : memerlukan impor Any dan variabel baru di baris baru untuk setiap argumen yang perlu mengabaikan kesalahan.

Ganti tipe nilai dengan cast

Ide yang sama dari contoh sebelumnya dapat diletakkan pada baris yang sama dengan bantuan cast() .

Dengan cara ini, deklarasi tipe nilai ditimpa secara inline, tanpa memerlukan variabel lain.

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') tidak mempengaruhi nilainya, tetap saja '23' , tapi sekarang Pylance dan mypy akan menganggapnya bertipe Any , yang artinya, mereka akan bertindak seolah-olah tidak mengetahui tipenya dari nilainya.

Jadi, ini setara dengan contoh sebelumnya, tanpa variabel tambahan.

Kelebihan : kesalahan akan diabaikan hanya untuk nilai tertentu, dan Anda masih akan melihat kesalahan tambahan untuk argumen lainnya. Tidak perlu variabel tambahan.

Kontra : memerlukan impor Any dan cast , dan jika Anda tidak terbiasa menggunakan cast() , ini mungkin terasa aneh pada awalnya.

Konfigurasi dalam argumen kelas

Pydantic memiliki beragam Konfigurasi Model yang tersedia.

Konfigurasi ini dapat diatur di class Config pada setiap model:

from pydantic import BaseModel


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

atau diteruskan sebagai argumen kata kunci saat mendefinisikan kelas model:

from pydantic import BaseModel


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

Konfigurasi spesifik frozen (dalam versi beta) memiliki arti khusus.

Ini mencegah kode lain mengubah contoh model setelah dibuat, menjaganya tetap "dibekukan" .

Saat menggunakan versi kedua untuk mendeklarasikan frozen=True (dengan argumen kata kunci dalam definisi kelas), Pylance dapat menggunakannya untuk membantu Anda memeriksa kode dan mendeteksi kesalahan ketika ada sesuatu yang mencoba menetapkan nilai dalam model yang "dibekukan".

VS Code strict type errors with model

Menambahkan default dengan Field

Pylance/pyright memerlukan default untuk menjadi argumen kata kunci pada Field untuk menyimpulkan bahwa bidang tersebut opsional.

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"

Ini adalah batasan transformasi kelas data dan tidak dapat diperbaiki dengan pydantic.

Detail Teknis

!!! peringatan Sebagai pengguna Pydantic, Anda tidak memerlukan detail di bawah ini. Jangan ragu untuk melewati sisa bagian ini.

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

Dukungan editor tambahan ini bekerja dengan menerapkan rancangan standar yang diusulkan untuk Dataclass Transform (PEP 681) .

Rancangan standar yang diusulkan ditulis oleh Eric Traut, dari tim Microsoft, penulis yang sama dari paket sumber terbuka Pyright (digunakan oleh Pylance untuk memberikan dukungan Python dalam VS Code).

Maksud dari standar ini adalah untuk menyediakan cara bagi perpustakaan seperti Pydantic dan lainnya untuk memberi tahu editor dan alat bahwa mereka (editor) harus memperlakukan perpustakaan ini (misalnya Pydantic) seolah-olah mereka adalah dataclasses , menyediakan pelengkapan otomatis, pemeriksaan tipe, dll.

Rancangan standar juga mencakup Formulir Alternatif untuk pengguna awal, seperti Pydantic, untuk segera menambahkan dukungan, bahkan sebelum rancangan standar baru selesai dan disetujui.

Draf standar baru ini dengan Alternate Form sudah didukung oleh Pyright, sehingga dapat digunakan melalui Pylance di VS Code.

Karena diusulkan sebagai standar resmi untuk Python, editor lain juga dapat dengan mudah menambahkan dukungan untuknya.

Dan penulis perpustakaan lain yang serupa dengan Pydantic juga dapat dengan mudah langsung mengadopsi standar tersebut (menggunakan "Formulir Alternatif") dan mendapatkan manfaat dari fitur editor tambahan ini.


本文总阅读量