python tasarım örüntüleri [kapalı]


166

Python kullanarak En İyi Uygulamalar, Tasarım modelleri ve SOLID ilkelerine örnekler veren herhangi bir kaynak arıyorum.



Yanıtlar:


152

Bunlarda bazıları örtüşüyor

Python'da Orta ve İleri Yazılım Marangozluğu

Pythonista Gibi Kod: Deyimsel Python

Python Deyimleri ve Verimliliği

Google Geliştiriciler Günü ABD - Python Tasarım Desenleri

Başka bir kaynak, örneğin Python Tarifleridir . İyi bir sayı en iyi uygulamaları izlemez, ancak orada yararlı olan bazı desenler bulabilirsiniz


1
Üçüncü bağlantı öldü. Ayna bulmaya çalıştım ama yapamadım, eğer herkes doğru bağlantıya sahipse lütfen ekleyin
formatkaka

1
Aynı şekilde, Python Deyimler ve Verimlilik işe yaramıyor gibi görünüyor.
Dawid Laszuk

Birinci ve ikinci bağlantılar öldü, bu yüzden onları Internet Arşivi anlık görüntüleri ile güncelledim. Yine de çok eski gibi görünüyorlar, ancak birçoğunun hala alakalı olduğundan eminim.
mannykary

24

tip

>>> import this

Python konsolunda.

Bu genellikle (iyi!) Bir şaka olarak ele alınsa da, birkaç geçerli pitona özgü aksiyom içerir.



6

Buradan ve buradan başlayabilirsiniz .

Tasarım desenlerine daha derinlemesine bakmak için Tasarım Desenleri: Yeniden Kullanılabilir Nesneye Dayalı Yazılım Öğeleri'ne bakmalısınız . Kaynak kodu Python'da değil, ancak kalıpları anlamanız gerekmiyor.


8
Tasarım kalıplarını uygulamak için deyimsel python'un nasıl kullanıldığını anlamanın önemli olduğunu düşünüyorum. GOF'ta kullanılan C ++ dilinden çok farklı bir dildir, bu nedenle C ++ 'dan python'a geçmek pythonic olmayan koda neden olur.
sakisk

1
Katılıyorum. Python, Java veya C ++ olsun, herhangi bir OO dilinde tek bir DP veya diğer DP'ler mümkün olacaktır. Pitonik olmayan ne düşünüyorsunuz?
Paul Hiemstra

1
İlk bağlantı, Python hakkında birçok yanlış iddiada bulunan oldukça zayıf bir kağıttır. İkinci şu anda 404's, bu yüzden, sanırım, çok daha az hasar yapıyor :)
Brandon Rhodes

6

Var olan veya olmayan nesneler üzerindeki öznitelikleri çağırırken kodunuzu basitleştirmek için kullanabileceğiniz bir şey Null Nesne Tasarım Deseni ( Python Yemek Kitabı'nda tanıtıldığım ) kullanmaktır.

Kabaca, Null nesneleriyle amaç, Python veya Null (veya Null işaretçileri) gibi diğer dillerde sık kullanılan ilkel veri türü için 'akıllı' bir değişiklik sağlamaktır. Bunlar, başka türlü benzer unsurlardan oluşan bir grubun bir üyesinin hangi nedenle olursa olsun özel olduğu önemli durum da dahil olmak üzere birçok amaç için kullanılır. Çoğu zaman bu, sıradan elemanlar ile ilkel Null değeri birbirinden ayırt etmek için koşullu ifadelerle sonuçlanır.

Bu nesne sadece öznitelik hatası eksikliğini yiyor ve varlığını kontrol etmekten kaçınabilirsiniz.

Bundan başka bir şey değil

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"

Bununla, yaparsanız Null("any", "params", "you", "want").attribute_that_doesnt_exists()patlamaz, ancak sessizce eşdeğer olur pass.

Normalde şöyle bir şey yapardın

if obj.attr:
    obj.attr()

Bununla sadece şunları yaparsınız:

obj.attr()

ve unut gitsin. NullNesnenin yoğun kullanımının, kodunuzdaki hataları gizleyebileceğini unutmayın.


3

Tasarım nesnelerini dinamik nesne yönelimli dillerde (yani Python) tartışan bu makaleyi (.pdf dosyasını seçin) de okumak isteyebilirsiniz . Sayfayı alıntılamak için:

Bu makalede, "Dörtlü Çete" veya "GOF" kitabındaki desenlerin, sık sık çağrıldığı gibi, dinamik, üst düzey, nesne yönelimli bir programlama dili kullanılarak benzer sorunlar ele alındığında nasıl ortaya çıktığı araştırılmaktadır. Bazı desenler kaybolur - yani doğrudan dil özellikleri tarafından desteklenirler, bazı desenler daha basittir veya farklı bir odağa sahiptir ve bazıları esasen değişmez.


1
Soru Python ile ilgiliydi; makale şemaya benzer bir dilden bahseder, yani anlatabildiğim kadarıyla, bu özel makale için yerinde icat etti. Sorgulayan (a) (b) Python uygulamaları konusunda uzun deneyime sahip bir akademik bilgisayar bilimcisi olmadıkça, kağıttan değerli bir şey elde edebileceklerinden şüpheliyim - ve daha da önemlisi, muhtemelen bu soruyu sormazlardı ilk başta. :)
Brandon Rhodes
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.