Saya mencari sumber daya apa pun yang memberikan contoh Praktik Terbaik, pola Desain dan prinsip SOLID menggunakan Python.
Saya mencari sumber daya apa pun yang memberikan contoh Praktik Terbaik, pola Desain dan prinsip SOLID menggunakan Python.
Jawaban:
Beberapa tumpang tindih dalam hal ini
Pertukangan Perangkat Lunak Menengah dan Lanjut dalam Python
Kode Seperti Pythonista: Python Idiomatik
Google Developers Day US - Pola Desain Python
Sumber lain adalah dengan contoh di Resep Python . Sejumlah yang baik tidak mengikuti praktik terbaik tetapi Anda dapat menemukan beberapa pola di sana yang berguna
" Thinking in Python " karya Bruce Eckel banyak bersandar pada Pola Desain
Anda dapat memulai di sini dan di sini .
Untuk tampilan yang lebih mendalam pada pola desain, Anda harus melihat Pola Desain: Elemen Perangkat Lunak Berorientasi Objek yang Dapat Digunakan Kembali . Kode sumber tidak dalam Python, tetapi tidak perlu bagi Anda untuk memahami polanya.
Sesuatu yang dapat Anda gunakan untuk menyederhanakan kode Anda saat memanggil atribut pada objek yang mungkin atau mungkin tidak ada adalah dengan menggunakan Pola Desain Objek Null (yang saya perkenalkan di Python Cookbook ).
Secara kasar, tujuan dengan objek Null adalah untuk menyediakan pengganti 'cerdas' untuk tipe data primitif yang sering digunakan Tidak ada dalam Python atau Null (atau pointer Null) dalam bahasa lain. Ini digunakan untuk banyak tujuan termasuk kasus penting di mana satu anggota dari beberapa kelompok elemen yang serupa khusus untuk alasan apapun Paling sering ini menghasilkan pernyataan bersyarat untuk membedakan antara elemen biasa dan nilai Null primitif.
Objek ini hanya memakan kurangnya kesalahan atribut, dan Anda dapat menghindari memeriksa keberadaannya.
Tidak lebih dari itu
class Null(object):
def __init__(self, *args, **kwargs):
"Ignore parameters."
return None
def __call__(self, *args, **kwargs):
"Ignore method calls."
return self
def __getattr__(self, mname):
"Ignore attribute requests."
return self
def __setattr__(self, name, value):
"Ignore attribute setting."
return self
def __delattr__(self, name):
"Ignore deleting attributes."
return self
def __repr__(self):
"Return a string representation."
return "<Null>"
def __str__(self):
"Convert to a string and return it."
return "Null"
Dengan ini, jika Anda melakukannya Null("any", "params", "you", "want").attribute_that_doesnt_exists()
tidak akan meledak, tapi diam-diam menjadi setara pass
.
Biasanya Anda akan melakukan sesuatu seperti
if obj.attr:
obj.attr()
Dengan ini, Anda cukup melakukan:
obj.attr()
dan lupakan itu. Berhati-hatilah bahwa penggunaan objek secara luas Null
berpotensi menyembunyikan bug dalam kode Anda.
Anda mungkin juga ingin membaca artikel ini (pilih file .pdf), yang membahas Pola Desain dalam bahasa berorientasi objek dinamis (yaitu Python). Mengutip halaman:
Makalah ini mengeksplorasi bagaimana pola-pola dari buku "Geng Empat", atau "GOF", seperti yang sering disebut, muncul ketika masalah serupa ditangani menggunakan bahasa pemrograman dinamis, tingkat tinggi, berorientasi objek. Beberapa pola menghilang - yaitu, mereka didukung langsung oleh fitur bahasa, beberapa pola lebih sederhana atau memiliki fokus yang berbeda, dan beberapa pada dasarnya tidak berubah.