4 pemeriksa tipe Python untuk menjaga kode Anda tetap bersih

Pada awalnya, Python tidak memiliki dekorasi tipe. Itu sesuai dengan tujuan keseluruhan untuk membuat bahasa cepat dan mudah digunakan, dengan jenis objek fleksibel yang mengakomodasi liku-liku penulisan kode dan membantu pengembang menjaga kode mereka tetap ringkas.

Namun, selama beberapa tahun terakhir, Python telah menambahkan dukungan untuk anotasi tipe, menginspirasi seluruh budaya perangkat lunak yang dikhususkan untuk pengecekan tipe Python selama pengembangan. Python tidak memeriksa tipe saat runtime - setidaknya, belum. Tetapi dengan memanfaatkan pemeriksa tipe yang baik, mengendarai senapan dengan Anda dalam IDE pilihan Anda, Anda dapat menggunakan anotasi jenis Python untuk menyaring banyak kesalahan umum sebelum mencapai produksi.

Pada artikel ini kita akan mempelajari empat pengaya pemeriksaan tipe utama untuk Python. Semua mengikuti pola yang kira-kira sama, memindai kode Python dengan anotasi tipe dan memberikan umpan balik. Tetapi masing-masing menawarkan tambahan yang berguna pada konsep dasar.

Mypy

Mypy bisa dibilang adalah sistem pemeriksaan tipe statis pertama untuk Python, karena pengerjaannya dimulai pada tahun 2012, dan masih dalam pengembangan aktif. Ini pada dasarnya adalah prototipe untuk cara kerja pustaka pemeriksaan jenis pihak ketiga dengan Python, bahkan jika banyak yang lain telah datang sejak itu dan memperluas fitur-fiturnya.

Mypy dapat berjalan mandiri, atau dari baris perintah, atau dapat bekerja sebagai bagian dari editor atau integrasi linter IDE. Banyak editor dan IDE mengintegrasikan Mypy; Ekstensi Python Visual Studio Code dapat bekerja dengannya secara langsung. Saat dijalankan, Mypy menghasilkan laporan tentang konsistensi kode Anda berdasarkan jenis informasi yang diberikannya.

Jika kode Anda tidak menyertakan anotasi tipe, Mypy tidak akan melakukan sebagian besar pemeriksaan kodenya. Namun, Anda dapat menggunakan Mypy untuk menandai kode yang tidak diberi tanda. Ini dapat dilakukan dengan berbagai tingkat ketelitian tergantung pada kebutuhan seseorang.

Jika Anda memulai dari awal dengan basis kode dan menginginkan strategi linting yang agresif secara preemtif, Anda dapat menggunakan --strictopsi untuk mencegah kode apa pun yang tidak diketik. Di sisi lain, jika Anda bekerja dengan basis kode lama yang tidak memiliki banyak definisi tipe, Anda dapat menggunakan opsi yang lebih santai seperti mencegah hanya definisi fungsi yang tidak diketik dengan  --disallow-untyped-defs sementara mengizinkan kode lain yang tidak diketik. Dan Anda selalu dapat menggunakan komentar sebaris # type: ignoreuntuk mencegah setiap baris ditandai.

Mypy dapat menggunakan file stub PEP 484 saat Anda ingin menggunakan petunjuk tipe untuk antarmuka publik modul. Selain itu, Mypy menawarkan stubgen, alat yang secara otomatis menghasilkan file rintisan dari kode yang ada. Untuk kode tanpa tipe, file rintisan menggunakan tipe generik, yang kemudian dapat Anda tandai sesuai kebutuhan.

Pytype

Pytype, dibuat oleh Google, berbeda dari orang-orang seperti Mypy dalam menggunakan inferensi, bukan hanya deskriptor tipe. Dengan kata lain, Pytype mencoba menentukan tipe dengan menganalisis aliran kode, daripada hanya mengandalkan anotasi tipe.

Pytype melakukan kesalahan di sisi kelonggaran setiap kali masuk akal untuk melakukannya. Jika Anda memiliki operasi yang berfungsi pada waktu proses dan tidak bertentangan dengan anotasi apa pun, Pytype tidak akan mengoceh tentang hal itu. Namun, ini berarti bahwa beberapa masalah yang harus ditandai (misalnya, mendeklarasikan variabel dengan tipe pada satu titik dan kemudian mendefinisikannya kembali dalam konteks yang sama) lewat tanpa pemberitahuan. Dokumentasi menyatakan hal-hal seperti itu akan dilarang di beberapa titik di masa mendatang.

Jika Anda memilih untuk menambahkan anotasi tipe ke kode Anda, maka reveal_typefungsi Pytype akan  sangat berguna. Jika Anda memasukkan pernyataan dalam kode yang berbunyi reveal_type(expr), Pytype mengevaluasi exprdan mengeluarkan peringatan yang menjelaskan tipenya. 

Perhatikan bahwa perilaku Pytype tertentu dikontrol dengan menambahkan atribut ke kode itu sendiri. Misalnya, jika Anda ingin menghentikan Pytype mengeluh tentang atribut yang hilang atau anggota modul yang disetel secara dinamis, Anda harus menambahkan atribut tersebut _HAS_DYNAMIC_ATTRIBUTES = Trueke kelas atau modul yang dimaksud, sebagai kebalikan dari menyetel beberapa jenis metadata konfigurasi Pytype.

Pyright / Pylance

Pyright adalah pemeriksa tipe Python Microsoft, termasuk sebagai bagian dari ekstensi Pylance untuk Visual Studio Code. Jika Anda sudah menjadi pengguna VS Code, ekstensi Pylance adalah cara paling nyaman untuk bekerja dengan Pyright; cukup instal dan pergi. Pyright memberikan pengalaman pengecekan tipe dan kode linting all-in-one yang baik, dengan banyak kemudahan dan kemajuan yang sama seperti alat analisis Python sebelumnya.

Seperti Pytype, Pyright dapat bekerja dengan basis kode yang tidak memiliki informasi jenis apa pun. Dalam kasus tersebut, Pyright akan melakukan yang terbaik untuk menyimpulkan jenis apa yang sedang dimainkan. Dengan demikian, Anda masih bisa mendapatkan hasil yang baik dengan Pytype pada basis kode lama tanpa deklarasi tipe. Tetapi Anda akan mendapatkan hasil yang lebih baik dari waktu ke waktu saat Anda secara bertahap menambahkan anotasi jenis ke kode Anda.

Pyright sangat fleksibel dengan cara yang melengkapi desain proyek Python dunia nyata. Seperti pemeriksa jenis lainnya, Pyright dapat dikonfigurasi per proyek dengan file konfigurasi berformat JSON di direktori proyek. Jalur individu dapat dikecualikan (tidak pernah diperiksa) atau diabaikan (kesalahan dan peringatan disembunyikan) dalam file konfigurasi, dan opsinya sangat terperinci.

Di VS Code, ruang kerja dengan beberapa root masing-masing dapat memiliki konfigurasi Pyright sendiri, jika bagian proyek yang berbeda memerlukan konfigurasi linting yang berbeda. Dengan nada yang sama, Anda dapat menentukan beberapa "lingkungan eksekusi" dalam sebuah proyek, masing-masing dengan venv atau jalur impornya sendiri.

Onggokan kayu api 

Dibuat oleh pengembang di Facebook dan Instagram, Pyre sebenarnya adalah dua alat dalam satu: pemeriksa tipe (Pyre) dan alat analisis kode statis (Pysa). Keduanya dirancang untuk bekerja bahu-membahu untuk memberikan tingkat pemeriksaan dan analisis yang lebih tinggi daripada alat lain, meskipun pengguna perlu melakukan sedikit pengangkatan berat untuk memanfaatkannya sepenuhnya.

Tumpukan kayu mengambil pendekatan yang mirip dengan Pytype dan Mypy. Kode yang tidak diketik ditangani dengan lebih lunak daripada kode yang diketik, sehingga Anda dapat memulai dengan basis kode Python yang tidak diketik dan menambahkan fungsi anotasi berdasarkan fungsi dan modul demi modul. Alihkan ke "mode ketat" dalam modul, dan Pyre akan menandai setiap anotasi yang hilang. Atau Anda dapat menjadikan mode ketat sebagai default dan menyisih di tingkat modul. Tumpukan kayu juga akan bekerja dengan file rintisan berformat .pyi.

Tumpukan kayu memiliki fitur yang kuat untuk memigrasi basis kode ke format yang diketik. The inferbaris perintah opsi ingests file atau direktori, membuat dididik tebakan tentang jenis yang digunakan, dan berlaku penjelasan ke file. Anda pasti ingin membuat cadangan kode Anda terlebih dahulu! (Jika Anda ingin mendapatkan informasi tipe dari program Python yang sedang berjalan , Anda dapat melakukannya dengan proyek Facebook / Instagram lain, MonkeyType.)

Sementara fitur Pyre menggemakan paket lain yang dirinci di sini, Pysa unik. Pysa melakukan "analisis noda" pada kode untuk mengidentifikasi potensi masalah keamanan, mengandalkan pustaka analisis aliran untuk komponen perangkat lunak tertentu dan menandai kode yang tampaknya rentan. Apa pun yang tersentuh oleh kode itu juga akan ditandai sebagai tercemar, meskipun Anda dapat menentukan komponen yang membersihkan data dan menghapus data tersebut dari grafik noda.

Satu kekurangannya adalah pustaka analisis noda komponen pihak ketiga Pysa masih kecil, jadi Anda mungkin perlu merancang model Anda sendiri. Tetapi banyak dari analisis noda adalah untuk perangkat lunak yang digunakan secara luas, seperti kerangka kerja web Django, SQL Alchemy ORM, dan pustaka ilmu data Pandas, belum lagi analisis untuk masalah sistem berkas yang umum.

Bagaimana melakukan lebih banyak hal dengan Python

  • Cara bekerja dengan tipe data daftar Python
  • Cara mengemas aplikasi Python dengan BeeWare Briefcase
  • Cara menjalankan anaconda berdampingan dengan ular piton lainnya
  • Cara menggunakan dataclass Python
  • Mulailah dengan async dengan Python
  • Cara menggunakan asyncio dengan Python
  • 3 langkah untuk perbaikan asinkron Python
  • Cara menggunakan PyInstaller untuk membuat file executable Python
  • Tutorial Cython: Cara mempercepat Python
  • Cara menginstal Python dengan cara cerdas
  • Bagaimana mengelola proyek Python dengan Puisi
  • Cara mengelola proyek Python dengan Pipenv
  • Virtualenv dan venv: Penjelasan lingkungan virtual Python
  • Python virtualenv dan venv lakukan dan tidak boleh dilakukan
  • Penjelasan threading dan subproses Python
  • Cara menggunakan debugger Python
  • Cara menggunakan timeit untuk membuat profil kode Python
  • Cara menggunakan cProfile untuk membuat profil kode Python
  • Cara mengonversi Python ke JavaScript (dan kembali lagi)