2015-06-01 16 views
5

Ho il seguente modello django:Sta usando "type" come nome di attributo una cattiva pratica?

class SomeProfile(models.Model): 
    type = models.CharField(max_length=1) 

sta usando "tipo" come nome di attributo considerata una cattiva pratica?

Qui l'attributo non è shadowing "tipo", quindi non è la stessa domanda di this one

+1

possibile duplicato di [È una cattiva pratica utilizzare un nome di funzione incorporato come attributo o identificativo del metodo?] (Http://stackoverflow.com/questions/9109333/is-it-bad-practice-to- use-a-built-in-function-name-as-an-attribute-or-method-ide) –

+0

perché non usare semplicemente '_type'? –

+1

@PadraicCunningham perché il carattere di sottolineatura principale viene utilizzato per i nomi dei membri privati ​​a livello di classe o modulo (in base a PEP-0008). Per risolvere i nomi riservati scontrati, si consiglia di utilizzare il carattere di sottolineatura _trailing_. –

risposta

6

c'è niente di sbagliato con esso. Non è un membro di python's reserved keywords.

Tuttavia, nominando un metodo type() sarebbe probabilmente confusa ...

+0

Anche se funziona, non direi che non c'è niente di sbagliato in questo. È potenzialmente fonte di confusione per il lettore al minimo. – 101

+2

Com'è più confusionario del modo in cui Django usa 'id'? 'id()' è anche un built-in ... – rnevius

+2

Sì, non credo che confonda nessuno dato che non c'è possibilità di accedervi senza nominare la classe o un'istanza (ad esempio SomeProfile.type o instance.type) – Alvaro

1

Sì - la sua cattiva pratica. type è una parola molto generica dal punto di vista delle parole chiave, sebbene non sia una parola chiave riservata. Anche se non ha attualmente alcun problema nell'applicazione, ma potrebbe dare in futuro in quanto potrebbe essere stato utilizzato in alcune librerie o estensioni Python già esistenti.

Esempio: tipo usato come una funzione per ottenere TypeCast informazioni della variabile

name = "John" 
age = 12 

print type(name) 
## Above line will return "<type 'str'>" 

print type(age) 
## Above line will return "<type 'int'>" 

Uso di type utilizzato come attribute è una cattiva pratica.

+0

quelli sono funzioni, non attributi – Alvaro

+1

Ofcourse - la sua funzione. Ma nominare le proprietà come 'type' creerà sicuramente confusione. Quando sappiamo già che esiste una funzione chiamata 'type', allora consiglio di non usarla come nome di una proprietà. Questo può essere considerato come una buona pratica. –

+0

Questo è come dire di non usare 'id', dato che è il nome di un builtin ... – rnevius

3

regola generale è: non utilizzare i nomi che vengono prese (ad esempio type, file, int, ecc), indipendentemente dal fatto che siano in un elenco di parole chiave "riservate" o no (in quanto permette di pitone, non è davvero "riservato"). Questo è importante soprattutto per evitare di mettersi nei guai quando è effettivamente necessario utilizzare l'oggetto reale (senza notare che lo si esegue in modo locale).

Se si desidera utilizzare uno di questi nomi, aggiungere semplicemente _ alla fine (ad esempio type_).

Nel tuo caso, dal momento che stai specificando type come attributo di classe, dovrebbe essere considerato sicuro poiché è possibile accedervi solo tramite la sua classe (self.type o SomeProfile.type).

Problemi correlati