pola desain python [ditutup]

166

Saya mencari sumber daya apa pun yang memberikan contoh Praktik Terbaik, pola Desain dan prinsip SOLID menggunakan Python.

Ted Smith
sumber

Jawaban:

152

Beberapa tumpang tindih dalam hal ini

Pertukangan Perangkat Lunak Menengah dan Lanjut dalam Python

Kode Seperti Pythonista: Python Idiomatik

Idiom dan Efisiensi Python

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

Ed.
sumber
1
Tautan ketiga sudah mati. Mencoba menemukan mirror tetapi tidak bisa, Jika ada yang memiliki tautan yang benar, harap tambahkan
formatkaka
1
Sama di sini, Idiom dan Efisiensi Python sepertinya tidak berfungsi.
Dawid Laszuk
Tautan pertama dan kedua sudah mati, jadi saya memperbaruinya dengan snapshot Internet Archive. Mereka tampaknya sudah sangat tua, meskipun saya yakin banyak dari itu masih relevan.
mannykary
24

Tipe

>>> import this

dalam konsol Python.

Meskipun ini biasanya diperlakukan sebagai lelucon (baik!), Ini berisi beberapa aksioma spesifik python yang valid.

Anonim
sumber
6

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.

Brian R. Bondy
sumber
8
Saya pikir penting untuk memahami bagaimana menggunakan python idiomatik untuk menerapkan pola desain. Ini adalah bahasa yang sangat berbeda dari C ++ yang digunakan dalam GOF sehingga porting dari C ++ ke python akan menghasilkan kode non-pythonic.
sakisk
1
Saya cenderung tidak setuju. DP tunggal atau DP lain akan dimungkinkan dalam bahasa OO apa pun, apakah itu Python, Java, atau C ++. Apa yang non-pythonic menurut Anda?
Paul Hiemstra
1
Tautan pertama adalah makalah yang cukup buruk, dengan banyak pernyataan keliru tentang Python. Yang kedua saat ini 404, dengan demikian, saya kira, melakukan kerusakan jauh lebih sedikit :)
Brandon Rhodes
6

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 Nullberpotensi menyembunyikan bug dalam kode Anda.

Esteban Küber
sumber
3

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.

Gilad Naor
sumber
1
Pertanyaannya adalah tentang Python; makalah ini berbicara tentang bahasa seperti Skema, dari apa yang bisa saya katakan, diciptakan di tempat untuk makalah khusus ini. Kecuali jika penanya adalah (a) ilmuwan komputer akademis dengan (b) pengalaman panjang dengan praktik Python, saya ragu apakah mereka bisa mendapatkan sesuatu yang bernilai dari kertas - dan, lebih tepatnya, mereka mungkin tidak akan menanyakan pertanyaan ini di tempat pertama. :)
Brandon Rhodes