Komentáře k článku

Python profesionálně: návrhové vzory

V předchozích dílech tohoto seriálu jsme se zabývali tipy, které by měl znát určitě každý, kdo programuje v Pythonu, aby si dokázal usnadnit práci. Dnes se posuneme trošku dál. Podíváme se, jak lze v Pythonu elegantně uplatnit několik návrhových vzorů. Konkrétně si vyzkoušíme udělat singleton, flyweight, dekorátor a další.

Zpět na článek

4 komentářů k článku Python profesionálně: návrhové vzory:

  1. Honza Kral

    Design patterns v Pythonu

    V pythonu se Design Patterns venuje hlavne Alex Martelli, doporucuji jeho materialy a prednasky:

    https://www.google.com/search?q=alex+martelli+design+patterns

    Jinak singleton se vetsinou dela tak ze se udela instance tridy na modulu:

    class DefaultConnec­tionProxy(objec­t): …
    connection = DefaultConnec­tionProxy()

    a pak se podle toho pouziva:

    from django.db import connection

    je to mnohem jednodussi prace nez s tridami, da se to lepe testovat atd (v testech si vytvorime vlastni instanci a nemusime machinovat s globalnim stavem aplikace (coz je vzdy spatne).

    Jinak drobna poznamka: ukazane pouziti singletonu je hodne diskutabilni pro jakekoliv web aplikace (samozrejme jako demonstrace je ok) – neni to thread safe a hrozily by velke bezpecnostni diry v zavislosti na externich faktorech (kontejner ve kterem aplikace pobezi). Pokud bychom tak trvali na pouziti singleton patternu, museli bychom se uchylit k _threading_local.

    1. Honza Kral

      Re: No nevim

      V pythonu se singleton dela proste tak ze se nadefinuje promena v modulu jako v mem predchozim komentari, vse ostatni je v clanku jen pro demonstraci toho co je mozne a rozhodne to neni cokoliv co by se kdekoliv pouzivalo.

  2. Honza Kral

    detaily a hacky

    has_key je deprecated, pouzivejte prosim:
    if args in self.memo: …

    misto get_compare_fun­ction pouzijte proste:
    from operator import attrgetter
    persons.sort(ke­y=attrgetter(‚at­tr1‘))
    persons.sort(ke­y=attrgetter(‚at­tr2‘))

    je to citelnejsi a efektivnejsi nez vase reseni.

    switchnuti metody na classe je proste hack a nemelo by se to nikdy vyuzivat – jeden if v implementaci obalovaci metody vas neznici a prispeje citelnosti, testovatelnosti a udrzovatelnosti.

Napsat komentář

Tato diskuse je již příliš stará, pravděpodobně již vám nikdo neodpoví. Pokud se chcete na něco zeptat, použijte diskusní server Devel.cz

Zdroj: https://www.zdrojak.cz/?p=3625