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.
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
ataustrict
(secara defaultoff
)
Sekarang Anda tidak hanya akan mendapatkan pelengkapan otomatis saat membuat contoh model Pydantic baru tetapi juga pemeriksaan kesalahan untuk argumen yang diperlukan .
Dan Anda juga akan mendapatkan pemeriksaan kesalahan untuk tipe data yang tidak valid .
!!! 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)
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
.
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:
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".
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.
本文总阅读量次