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

Python Attrs:Kelas Data Tingkat Lanjut, Dengan Kode Contoh

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

Daftar isi

Instal attrs

Paket attrs bukan bagian dari pustaka dasar, 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. Paket tersebut bernama attrs, jadi menginstalnya akan terlihat seperti ini:

$ pip install attrs

# or with pipenv:
$ pipenv install attrs

Attrs vs kelas data

Penulis attrs pada kenyataannya, telah bekerja pada PEP yang memperkenalkan kelas data ke dalam Python. Kelas data asli Python sengaja dibuat lebih sederhana dan lebih mudah dipahami sementara attrs menawarkan berbagai fitur yang mungkin Anda inginkan!

Beberapa alasan untuk memilih Python attrs atas kelas data bawaan adalah:

Contoh dasar Python attrs

Mari kita lihat contoh yang sangat mendasar 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 kelas data biasa:validator dan konverter.

Contoh validator attrs Python

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

  1. Menggunakan dekorator
  2. Dengan menyediakan fungsi yang dapat dipanggil

Saya akan mendemonstrasikan metode fungsi yang dapat dipanggil di sini terlebih dahulu. Attrs menawarkan beberapa validator di luar kotak, di mana kami akan menggunakan instance_of validator 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 kami mencoba membuat objek C dengan nilai string untuk x, validator instance_of akan memunculkan kesalahan karena memerlukan tipe int alih-alih string.

Sekarang mari kita 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 will be something like:
# DividableByTwo(x=60)
# ...
# ValueError: 11 is not dividable by 2

Contoh konverter attrs Python

Konverter mengambil nilai yang ditetapkan dan mengonversinya secara otomatis. Anda dapat menggunakan ini untuk semua jenis tujuan. Salah satu contohnya adalah secara otomatis mengonversi nilai menjadi int. Sekali lagi, mari kita mulai dengan menggunakan fungsi yang dapat dipanggil, dalam hal ini kita cukup menggunakan fungsi int() 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 menggunakan dua contoh di atas untuk terlebih dahulu mengonversi input apa pun menjadi int, lalu memeriksa apakah nilainya dapat dibagi dua.

Menggunakan slot dengan Python attrs

Terakhir, Anda dapat memberi tahu attrs untuk menggunakan kelas slotted. Kelas slotted memiliki beberapa keunggulan dibandingkan kelas reguler:

Singkatnya, dengan kelas slotted Anda secara eksplisit menyatakan atribut instance mana yang Anda harapkan dimiliki oleh instance objek Anda. Dengan cara ini, Python dapat mengabaikan beberapa pemeriksaan dan semacamnya, menghasilkan lebih sedikit penggunaan memori dan sedikit peningkatan kecepatan. Anda dapat menemukan detail lebih lanjut di dokumentasi attrs di sini.

Namun, kelas slotted juga memiliki peringatan, terutama saat 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. Tipe Data Python
  2. Python String strip() Fungsi dengan CONTOH
  3. Python String count() dengan CONTOH
  4. Python round() fungsi dengan CONTOH
  5. Python map() berfungsi dengan CONTOH
  6. Python Timeit() dengan Contoh
  7. Penghitung Python dalam Koleksi dengan Contoh
  8. Python time.sleep():Tambahkan Penundaan ke Kode Anda (Contoh)
  9. Daftar Python count() dengan CONTOH
  10. Indeks Daftar Python () dengan Contoh