2014-04-12 17 views
6

Sono un principiante di pitone e mi chiedo quale sia il modo più plateale di scrivere le funzioni di utilità? Come in Java/C++, creare una classe di utilità e avere metodi al suo interno o scrivere funzioni all'interno del modulo? La funzione deve essere utilizzata su varie classi nello stesso modulo.Modo Pythonic: funzioni di utilità in classe o modulo

La stessa domanda per le variabili utilizzate da diverse classi e funzioni nel modulo. Posso averli all'interno della classe di utilità o averli definiti all'interno del modulo. Cos'è più pythonic? Qualcuno per favore guidami.

L'unico argomento che ho a favore di scriverli in classe è che lo rende più orientato all'oggettivo.

+4

Utilizzare solo l'ambito del modulo. http://dirtsimple.org/2004/12/python-is-not-java.html – PaulMcG

+5

Più orientato agli oggetti non è un obiettivo in sé.Se il problema richiede oggetti, scrivi classi. Altrimenti, non farlo. –

+1

Perché lo chiamano anche oggetto ** - programmazione orientata? Tutti quelli di cui tutti vogliono parlare sono ** classi **. –

risposta

7

Benvenuti in Python! Sei molto lontano da C++ e Java, e questa è una buona cosa. ;)

Questo è un estratto da un excellent discourse on object-oriented programming da another StackOverflow volunteer:

rapida: fuori dalla parte superiore della testa, che cosa è la programmazione orientata agli oggetti su?

...

Se pensavate che una qualsiasi delle parole “incapsulamento”, “eredità”, “polimorfismo”, “information hiding”, “astrazione”, o “VTables”, si è sbagliato .

Se si pensava a una parola come "classe", "prototipo" o "tipo", si è ancora errati.

La programmazione orientata agli oggetti è circa oggetti: gruppi di stato e comportamento.

Perché sto citando questo? (Be ', per uno, è il Pythonic che piace le battute espressive che puoi ottenere dietro il messaggio di.) Perché qui sta la risposta alla tua domanda.

La "funzione di utilità" rappresenta effettivamente un comportamento che può essere espresso in modo corretto (parola chiave) come oggetto padre in un'erarchia ereditaria? Quindi con tutti i mezzi, metterlo in una classe. Ma non se questo significa la creazione di una classe solo per metterlo in.

Sei sempre partecipando programmazione orientata agli oggetti quando si scrive Python, perché tutto in Python è un oggetto. (Considera che puoi persino chiamare i metodi su letterali, ad es., 'hello'.upper().) Se ti strizzi gli occhi in un certo modo, puoi anche pensare che i tuoi moduli siano solo l'interno di una definizione di classe. Hanno il loro scopo, possibilmente funzioni a livello di modulo (modulo "metodi" se stai seguendo la mia analogia) e possibilmente classi interne. Il comportamento è estremamente simile perché è essenzialmente la stessa interfaccia.

Suggerisco di dare un'occhiata alla directory site-packages in tutti i moduli e pacchetti disponibili. Otterrai delle ottime idee su come questo viene normalmente fatto e probabilmente vedrai decine di esempi di funzioni a livello di modulo che sono più o meno a cui ti riferisci quando dici "funzione di utilità".

Problemi correlati