- fieldenum adalah enum yang memiliki nilai (dapat diinstansiasi).
- Mendukung enum dengan field ala Rust secara rapi.
- Berupaya menyeimbangkan kemurnian pemrograman fungsional dan kepraktisan di Python.
- Secara bawaan mendukung
Option sebagai alternatif untuk None dan BoundResult sebagai alternatif untuk exception.
- Sudah diuji secara menyeluruh.
- Dokumentasi bahasa Inggrisnya masih minim, tetapi ada rencana untuk terus melengkapinya secara bertahap.
- Dukungan dalam berbagai bentuk seperti issue, PR, dan star semuanya sangat disambut.
14 komentar
Saya merasa union type pada dataclass mungkin lebih baik; selain deklarasinya yang lebih singkat, saya kurang melihat keunggulannya. Apakah ada hal yang membuat fieldenum secara khusus lebih unggul?
Keunggulan besar lainnya adalah deklarasinya singkat, ringkas, dan hanya berisi bagian yang diperlukan.
Sebagai contoh,
Jika
fieldenumdi atas diimplementasikan dengan dataclass, kodenya harus ditulis seperti berikut.Kodenya menjadi lebih panjang dan lebih sulit dibaca, kemungkinan melakukan kesalahan juga lebih tinggi, dan rasanya juga tidak terlalu rapi, bukan?
Tentu saja, bahkan jika ditulis seperti ini pun Anda tidak akan mendapatkan berbagai fitur lain yang disediakan oleh
fieldenum(generic, repr,__fields__, ...).Karena itu, akan jauh lebih praktis jika ada
fieldenumyang sudah mengimplementasikan dan mengumpulkan semua hal tersebut.Selain itu, sepertinya ada baiknya juga melihat isi pada bagian
contoh.dataclasssecara default mendukung implementasireprdataclasses.fieldsmenyediakan informasi runtime tentang definisi fieldtyping, dan syntactic sugar didukung sejak 3.12Messages, ini bisa diimplementasikan sebagai modulMeski begitu, ketiadaan kode boilerplate yang diperlukan untuk definisi class, serta kemampuan menggunakan enum dan class dengan satu antarmuka yang sama, tampaknya bisa menjadi kelebihan. Terima kasih atas penjelasan detailnya.
https://stackoverflow.com/a/47784683
Sudah ada berbagai upaya untuk mengekspresikan struktur seperti ini, tetapi pada akhirnya ini tampaknya bisa dianggap sebagai keterbatasan sekaligus kelemahan Python. Saya pertama kali mengenal ADT (algebraic data type) lewat OCaml saat kuliah, jadi agak disayangkan bahwa ketika bekerja kita hanya bisa menirunya dengan cara seperti ini.
Library yang dibuat oleh ilotoki mungkin bisa dianggap sebagai contoh yang paling mendekati ADT. Akan bagus jika suatu hari nanti ini masuk ke standard library dan digunakan secara luas.
Jika implementasi
Messagedibuat dengan Union, Anda tidak bisa memanfaatkan pewarisan metode. Misalnya,Jika menambahkan metode
.processseperti di atas, Anda bisa menggunakan metode.process()pada semua varian.Selain itu,
repryang saya jelaskan mengacu pada "repr sebagai varian dari enum tersebut".Sebagai contoh, jika
reprdipanggil dengan pembungkus fieldenum, hasilnya berjalan seperti berikut.Tanpa
__repr__kustom, fakta bahwa ia adalah subvarian dari enumMessagetidak akan terlihat.Quitadalah unit variant yang digunakan tanpa pemanggilan.Selain itu, untuk jenis varian tanpa field yang memang harus menggunakan pemanggilan, Anda bisa memeriksanya sebagai singleton dengan operator
is.Dengan menggunakan fieldenum, hal ini membantu menangani secara otomatis berbagai detail implementasi yang mudah terlewat seperti ini.
Bolehkah saya mengusulkan agar Anda membawakan presentasi ini di PyCon Korea? Saya sangat menikmatinya, jadi saya ingin langsung mendengar cerita dan penjelasan tentang proses pembuatannya dari Anda!
Kalau bisa presentasi di PyCon, rasanya akan jadi kehormatan besar. Saya belum tahu apakah hanya karena saya ingin melakukannya berarti saya pasti bisa(^^;), tapi akan saya pertimbangkan.
Dan akan lebih baik jika contoh
Optionjuga dijelaskan di README berbahasa Inggris.Optionmudah dipahami dan terasa familier untuk didekati. Dari urutan penjelasan di dokumentasi, rasanya akan lebih baik jikaOptiondijelaskan lebih dulu.Dokumentasi bahasa Inggrisnya masih belum siap sehingga saat ini agak minim... Saya berencana menerjemahkannya ke bahasa Inggris setelah dokumentasi bahasa Korea cukup matang. Atau, PR terkait juga sangat kami sambut!
Menurut saya, memperkenalkan
Optionlebih dulu juga tampaknya lebih baik. Akan saya perbaiki.Wah, menarik sekali!!
Ada bagian yang perlu diperbaiki pada contoh kode di dokumen bahasa Korea yang Anda tautkan.
Terima kasih sudah memberi tahu. Sudah saya perbaiki!
Seharusnya saya unggah ke Show GN, tapi karena salah malah saya unggah sebagai postingan biasa;;
Saya sudah memperbaikinya.
Terima kasih~