Wpis z mikrobloga

@waSP_: Z wzorcami projektowymi to w Pythonie raczej ciężko. Cały katalog GoF i kolejne sprowadzają się do tego, żeby programować pod kątem interfejsów, a nie implementacji, gdzie pojęcie interfejsów jest w Pythonie obce. Jeśli chcesz wiedzieć, jak pisać zgodnie z duchem Pythona, poczytaj o idiomatic Python
@tenji: A możesz podać przykłady konkretnych wzorców projektowych używanych w Pythonie? Bo z tych najpopularniejszych to:

* Strategia średnio (brak interfejsów)
* Singleton, niby się da, ale żeby działał jak prawdziwy singleton, musisz korzystać z metaklas
* Wszelkie fabryki też niby można, ale znowu brak interfejsów mocno ogranicza (więc najczęściej robi się proste fabryki bazujące na słownikach)
* Metoda szablonowa - stosuje się powszechnie przy użyciu ABC
* Obserwator - raczej
@dog_meat: Chyba cos ci sie pomylilo. Wzorce projektowe sie stosuje, nie sa zapisane w jezyku..W jednych jezykach stosuje sie je latwiej i czesciej w innych trudniej i rzadziej.

Strategia średnio (brak interfejsów)

Chociazby w sqlalchemy przy wyborze implementacji silnika

Singleton, niby się da, ale żeby działał jak prawdziwy singleton, musisz korzystać z metaklas

Jezeli sie da to znaczy , ze sie da.

Wszelkie fabryki też niby można, ale znowu brak interfejsów
@tenji: to że się da, nie znaczy że używa się tego powszechnie. Raczej na codzień mało kto tworzy metaklasy.
Jeśli chodzi o fabryki, to chyba doskonale wiesz czym się różni np. "fabryka" oparta na słowniku od wzorca fabryka abstrakcyjna.

A jeśli chodzi o interfejsy, to czy tego chcesz, czy nie to właśnie na nich opiera się większość wzorców (przynajmniej GoF i Fowlera) i niejednokrotnie powtarzali: programuj interfejsy, nie implementacje.

I jak
Oczywiście możesz próbować zrobić interfejsy, korzystając z klas abstrakcyjnych bez implementacji, ale to już chyba nie jest do końca po drodze z filozofią Pythona
@dog_meat: @Budek24: nie zrozumiałeś mnie. Ja wiem, że w Pythonie są klasy abstrakcyjne (jest nawet moduł abc) . A niezgodne z filozofią Pythona byłoby tworzenie pustych klas abstrakcyjnych bez żadnej zaimplementowanej metody w roli interfejsów