Saya mencari kasus penggunaan praktis dan non-sintetis dekorator kelas Python. Sejauh ini, satu-satunya kasus yang masuk akal bagi saya adalah mendaftarkan kelas di sistem penerbit-pelanggan, misalnya plugin atau acara, seperti:
@register
class MyPlugin(Plugin):
pass
atau
@recieves_notifications
class Console:
def print(self, text):
...
Kasus waras lain yang saya pikirkan bisa saja dibangun di atas warisan, metaclasses atau metode dekorasi. Bisakah Anda berbagi contoh yang baik (atau buruk!) Menggunakan dekorator kelas?
Terima kasih!
ABCMeta
, bukan@abstractclass
dekorator kelas.Jawaban:
Saat menulis tes unit memiliki
@unittest.skipIf
dan@unittest.skipUnless
dapat digunakan pada metode individu atau pada seluruhunittest.TestCase
definisi kelas. Ini membuat penulisan tes untuk masalah spesifik platform jadi lebih mudah.Contoh dari
asyncio/test_selectors
sumber
Dekorator kelas secara eksplisit dibuat untuk membuat beberapa hal yang sudah dapat diekspresikan melalui metaclasses menjadi lebih menyenangkan, dari PEP :
sumber
Dari ini pertanyaan stack overflow:
sumber
Mencari kasus penggunaan yang dapat dilakukan dengan dekorator di kelas adalah sia-sia - apa pun yang dapat dilakukan dengan dekorator di kelas dapat dilakukan dengan metaclasses. Bahkan contoh pendaftaran Anda. Untuk membuktikannya, ini adalah metaclass yang menerapkan dekorator:
Python 2:
Python 3:
sumber