Sono alla ricerca di risorse che forniscano esempi di best practice, modelli di progettazione e principi SOLID che utilizzano Python.modelli di disegno pitone
risposta
Alcuni si sovrappongono in questi
Intermediate and Advanced Software Carpentry in Python
Code Like a Pythonista: Idiomatic Python
Google Developers Day US - Python Design Patterns
Un'altra risorsa è l'esempio al Python Recipes. Un buon numero non segue le migliori pratiche ma è possibile trovare alcuni modelli in là che sono utili
Il terzo link è morto. Ho cercato di trovare lo specchio ma non potrei, Se qualcuno ha il link corretto, per favore aggiungi – formatkaka
Lo stesso qui, _Python Idioms and Efficiency_ non sembra funzionare. –
È possibile iniziare here e here.
Per uno sguardo più approfondito ai modelli di progettazione, è necessario consultare Design Patterns: Elements of Reusable Object-Oriented Software. Il codice sorgente non è in Python, ma non è necessario che tu capisca i pattern.
Penso che sia importante capire come usare Python idiomatico per implementare modelli di progettazione. È un linguaggio molto diverso dal C++ che viene usato in GOF, quindi il porting da C++ a python darà come risultato un codice non-pythonic. – ierax
Tendo a non essere d'accordo. Un DP singleton o altri DP saranno possibili in qualsiasi linguaggio OO, che si tratti di Python, Java o C++. Che cosa è non-pythonic secondo te? –
Il primo collegamento è un documento piuttosto scadente, con molte affermazioni errate su Python. Il secondo attualmente 404, quindi, suppongo, facendo molto meno danno :) –
Si potrebbe anche voler leggere questo article (selezionare il file .pdf), che discute i modelli di progettazione in linguaggi orientati agli oggetti dinamici (cioè Pitone). Per citare la pagina:
Questo documento esplora come i modelli della "Banda dei Quattro", o libro "GOF", come viene spesso chiamato, vengono visualizzati quando problemi simili vengono affrontati con una dinamica, di ordine superiore , linguaggio di programmazione orientato agli oggetti. Alcuni dei pattern scompaiono, ovvero sono supportati direttamente dalle funzionalità del linguaggio, alcuni pattern sono più semplici o hanno un focus diverso, altri sono sostanzialmente invariati.
La domanda riguardava Python; il documento parla del linguaggio simile a Scheme che è, da quello che posso dire, inventato sul posto per questo particolare articolo. A meno che l'interrogante non sia (a) uno scienziato informatico accademico con (b) lunga esperienza con le pratiche di Python, dubito che possano ottenere qualcosa di valore dal giornale - e, più precisamente, probabilmente non avrebbero fatto questa domanda innanzitutto. :) –
Bruce Eckel di "Thinking in Python" si appoggia pesantemente su Design Patterns
Nota che secondo [wiki] (http://wiki.python.org/moin/AdvancedBooks) questo libro non viene più mantenuto. – ierax
Tipo
>>> import this
in una console Python.
Sebbene questo sia solitamente trattato come una battuta (fine!), Contiene un paio di assiomi validi specifici per Python.
Qualcosa che è possibile utilizzare per semplificare il codice quando si chiamano attributi su oggetti che potrebbero o non potrebbero esistere è utilizzare Null Object Design Pattern (a cui sono stato introdotto in Python Cookbook).
Approssimativamente, il gol con gli oggetti Null è di fornire un 'intelligente' sostituzione per l'usato spesso primitivo tipo di dati Nessuno in Python o Null (o puntatori NULL) in altre lingue. Questi sono usati per molti scopi incluso il caso importante in cui un membro di qualche gruppo di elementi altrimenti simili è speciale per qualsiasi motivo. La maggior parte di spesso restituisce istruzioni condizionali per distinguere tra gli elementi ordinari e il valore Null primitivo.
Questo oggetto mangia solo la mancanza di errore di attributo ed è possibile evitare di verificarne l'esistenza.
Non è niente di più di
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"
Con questo, se lo fai Null("any", "params", "you", "want").attribute_that_doesnt_exists()
non esploderà, ma solo silenzio diventato l'equivalente di pass
.
Normalmente si farebbe qualcosa di simile
if obj.attr:
obj.attr()
Con questo, basta fare:
obj.attr()
e non pensarci più. Fai attenzione che l'uso estensivo dell'oggetto Null
può potenzialmente nascondere bug nel codice.
- 1. disegno 3D con pitone
- 2. disegno collaborativo/disegno dal vivo
- 3. pitone
- 4. Disegno di un triangolo
- 5. API di disegno Google
- 6. Disegno frattali di fiamme
- 7. pitone di random.shuffle
- 8. pitone, stringa di formato
- 9. interpolazione stringa di pitone
- 10. di php per pitone
- 11. Disegno di relazione molti a molti - Disegno tabella intersezione
- 12. Inserimento di un disegno AutoCAD preesistente in un disegno corrente
- 13. Disegno animazione
- 14. Materiale disegno
- 15. pitone sys.path
- 16. sottoclassi pitone
- 17. pitone numero
- 18. confondendo pitone
- 19. gtkD: Esempio di disegno minimo?
- 20. Disegno diagrammi di stato UML
- 21. cerchi di disegno con System.Drawing
- 22. Libreria di disegno grafico C++
- 23. Finestra di disegno in JFrame
- 24. Rettangoli di disegno in iOS
- 25. Disegno di un pulsante trasparente
- 26. Interruzione del disegno di CATiledLayer
- 27. Django modello di modifica Disegno
- 28. Disegno all'esterno di UIInputViewController frame
- 29. Disegno di una mucca eccellente
- 30. Disegno di semicerchi in R
Duplicato: http://stackoverflow.com/questions/127377/programming-languages-and-design-patterns, http://stackoverflow.com/questions/546479/do-oo-design-principles-apply-to -python, http://stackoverflow.com/questions/112358/what-are-some-good-web-resources-for-learning-object-oriented-programming –
https://github.com/faif/python-patterns /blob/master/README.md –