È una restrizione simile a Java OK Stile Python?

0

Il buon stile Pythonic è molto più flessibile della restrizione ristretta di Java:

In Java, stile buono significa private sui metodi, ove possibile, tutti i campi incapsulati, dichiarazioni di tipo, interfacce definite compresi i metodi abstract .

Tutto questo è ora eseguibile in Python, ma il buon stile consente e incoraggia i membri pubblici, la digitazione di anatre, ecc.

Tuttavia trovo tutto ciò abbastanza utile. Gli IDE, ad esempio, possono fare molto di più con queste dichiarazioni in atto. COSÌ, faccio spesso queste cose in Python, molto più degli esempi di buon codice Pythonic che trovo.

In realtà cattivo stile per fare queste cose?

    
posta Joshua Fox 02.12.2018 - 16:54
fonte

1 risposta

2

Sorprendentemente, Python ti offre molta scelta qui. La maggior parte del codice Python è piuttosto informale riguardo ai tipi esatti e se alcuni attributi fanno parte dell'interfaccia pubblica. Funziona bene, finché non lo fa. In particolare, il mantenimento di progetti di grandi dimensioni è più impegnativo in linguaggi dinamici come Python.

Ma come dice lo Zen di Python: Explicit è meglio di implicito.

Python si sta muovendo verso abilitando ma non richiede uno stile più rigoroso. È importante sottolineare che le versioni recenti di Python aggiungono la sintassi per le annotazioni sul tipo. Sebbene queste annotazioni siano relativamente limitate e non abbiano alcun effetto di runtime (di solito vengono elaborate da controllori di tipi esterni come mypy) rendono più fattibile l'uso della digitazione statica in parti del codice. Se questo è fattibile dipende da quali moduli stanno usando, dal momento che la maggior parte dei moduli non fornisce alcuna annotazione sul proprio, e alcuni non hanno nemmeno interfacce che possono essere digitate.

Questo è un po 'simile a JavaScript e TypeScript: il controllo del tipo (con tutti i suoi vantaggi come un migliore autocompletamento semantico negli editor) è disponibile se lo si desidera, ma non si è obbligati a dichiarare i tipi.

Quindi, se ti senti così ti aiuta a mantenere il tuo codice gestibile ...

  • fai uso di docstring
  • usa le annotazioni sui tipi
  • usa pedine esterne e linters come mypy e pylint
  • preferisci le proprietà di sola lettura rispetto all'assegnazione diretta di attributi pubblici
  • crea interfacce esplicite (ad esempio utilizzando la classe di base abc.ABC )
  • esplicitamente assert delle precondizioni di funzione, ad esempio:

    assert isinstance(param, SomeInterface), \
        f"param must be SomeInterface, but was {type(param)}"'
    

Il codice Python che scrivo tende a farlo, con moderazione. Soprattutto perché il controllo di tipo statico è un componente aggiuntivo successivo, è piuttosto limitato e non sempre funziona. E non vale davvero la pena di incapsulare meticolosamente ogni attributo come faresti in Java. Ma i controlli più potenti aiutano a catturare i bug in anticipo, quindi essere un po 'più espliciti del solito può essere una buona idea.

    
risposta data 02.12.2018 - 17:37
fonte

Leggi altre domande sui tag