Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Python

Menguasai Python Attrs: Bangun Class Data Lanjutan dengan Contoh Praktis

Menguasai Python Attrs: Bangun Class Data Lanjutan dengan Contoh Praktis

Paket Python Attrs memungkinkan Anda membuat class data lanjutan menggunakan anotasi sederhana. Tentu saja, Python memiliki modul class data bawaannya juga, tetapi paket Python attrs menawarkan beberapa fitur tambahan yang mungkin Anda sukai!

Daftar isi

Instal attrs

Paket attrs bukan bagian dari perpustakaan bawaan, jadi Anda perlu menginstalnya dengan perintah pip install atau yang serupa, seperti Pipenv. Anda mungkin juga ingin membuat lingkungan virtual, sehingga tidak akan mengganggu proyek lain yang Anda miliki. Paketnya disebut attrs, jadi menginstalnya akan terlihat seperti ini:

$ pip install attrs # atau dengan pipenv: $ pipenv install attrs

Attrs vs data classes

Penulis attrs sebenarnya telah bekerja pada PEP yang memperkenalkan data classes ke dalam Python. Data classes bawaan Python sengaja dibuat lebih sederhana dan lebih mudah dipahami sementara attrs menawarkan seluruh rentang fitur yang mungkin Anda inginkan!

Beberapa alasan untuk memilih Python attrs dibandingkan data classes bawaan adalah:

Contoh dasar Python attrs

Mari kita lihat contoh yang sangat dasar terlebih dahulu:

import attr @attr.s class Person(object): name = attr.ib(default='John') surname = attr.ib(default='Doe') age = attr.ib(init=False) p = Person() print(p) p = Person('Bill', 'Gates') p.age = 60 print(p) # Output: # Person(name='John', surname='Doe', age=NOTHING) # Person(name='Bill', surname='Gates', age=60)

Beberapa pengamatan:

Selanjutnya mari kita lihat fitur terpenting yang ditawarkan paket ini dibandingkan data classes reguler: validator dan konverter.

Contoh validator Python attrs

Anda dapat menambahkan validator ke class data attrs Anda dengan dua cara:

  1. Menggunakan decorator
  2. Dengan menyediakan fungsi callable

Saya akan mendemonstrasikan metode fungsi callable di sini terlebih dahulu. Attrs menawarkan beberapa validator secara bawaan, di mana kita akan menggunakan validator instance_of dalam contoh berikut:

>>> @attr.s ... class C(object): ... x = attr.ib(validator=attr.validators.instance_of(int)) >>> C(42) C(x=42) >>> C("a string") Traceback (most recent call last): ... TypeError: ("'x' must be <type 'int'> (got 'a string' that is a <type 'str'>).", ...

Karena kita mencoba membuat objek C dengan nilai string untuk x, validator instance_of melemparkan kesalahan karena memerlukan tipe int alih-alih string.

Mari kita sekarang definisikan validator kita sendiri:

import attr @attr.s class DividableByTwo(object): x = attr.ib() @x.validator def check(self, attribute, value): if value % 2 != 0: raise ValueError(f'{value} is not dividable by 2') print (DividableByTwo(60)) print (DividableByTwo(11)) # Output akan seperti: # DividableByTwo(x=60) # ... # ValueError: 11 is not dividable by 2

Contoh konverter Python attrs

Konverter mengambil nilai yang diatur dan mengonversinya secara otomatis. Anda dapat menggunakannya untuk semua tujuan. Satu contoh adalah untuk secara otomatis mengonversi nilai menjadi int. Lagi, mari kita mulai dengan menggunakan fungsi callable, dalam kasus ini kita cukup menggunakan fungsi int() bawaan Python:

import attr @attr.s class C(object): x = attr.ib(converter=int) c = C("1") print(c) # Output: # C(x=1)

Input kami (string “1”) dikonversi menjadi integer secara otomatis. Karena konverter dijalankan sebelum validator, Anda dapat memvalidasi nilai akhir setelah konversi. Misalnya, Anda dapat menggabungkan dua contoh di atas untuk pertama mengonversi semua input menjadi int, dan kemudian memeriksa apakah nilai tersebut dapat dibagi dengan dua.

Menggunakan slots dengan Python attrs

Terakhir, Anda dapat memberi tahu attrs untuk menggunakan class slotted. Class slotted memiliki beberapa keuntungan dibandingkan class reguler:

Singkatnya, dengan class slotted Anda secara eksplisit menyatakan atribut instance apa yang Anda harapkan dari objek instance Anda. Dengan cara ini, Python dapat mengabaikan beberapa pemeriksaan dan hal semacam itu, menghasilkan penggunaan memori yang lebih sedikit dan peningkatan kecepatan sedikit. Anda dapat menemukan lebih banyak detail dalam dokumentasi attrs di sini.

Namun, class slotted juga memiliki keterbatasan, terutama ketika Anda membuatnya secara manual. Untungnya, attrs menawarkan cara sederhana untuk mengaktifkan fitur ini:

import attr @attr.s(slots=True) class YourClassName: ...

Terus belajar


Python

  1. Menguasai Tipe Data Python: Panduan Praktis
  2. Menguasai Metode strip() Python: Panduan Lengkap & Contoh Praktis
  3. Menguasai str.count() Python: Cara Menghitung Karakter & Substring dengan Contoh
  4. Fungsi round() Python Dijelaskan dengan Contoh Praktis
  5. Menguasai Fungsi map() Python: Sintaks, Contoh, dan Praktik Terbaik
  6. Python timeit() – Mengukur Waktu Eksekusi dengan Contoh Praktis
  7. Python Counter di collections – Perhitungan, Pembaruan, dan Operasi Aritmetika
  8. Python time.sleep(): Cara Menambahkan Jeda dalam Kode (Contoh)
  9. Python list.count(): Panduan Ahli dengan Contoh Praktis
  10. Python List index() – Cara Mencari Posisi Elemen dengan Contoh Praktis