2010-03-10 13 views

risposta

31

È possibile, ma non si dovrebbe. Non è una buona abitudine usare i nomi dei built-in perché sovrascriveranno il nome del built-in in quell'ambito. Se devi usare quella parola, modificala leggermente per il contesto dato.

Anche se probabilmente non è importante per un piccolo progetto che non utilizza type, è meglio rimanere fuori dall'abitudine di utilizzare i nomi di parole chiave/built-in. Il Python Style Guide fornisce una soluzione per questo se è assolutamente necessario utilizzare un nome che è in conflitto con una parola chiave:

single_trailing_underscore_: usato da convenzione per evitare conflitti con Python parola chiave, per esempio

+13

BTW, dal momento che il tipo è una parola generica, spesso sovrautilizzata, l'aggiunta di un qualifer come in "car_type" o "animal_type" rende comunque un programma di autodocumentazione – mjv

+0

ho usato 'tipe', ma ho sempre odiato il modo in cui sembrava. ora uso 'typ' – rbp

+2

Hahah, è uno scherzo @rbp, giusto? ...destra? – Bloke

2

È possibile, ma si maschererà il tipo di nome incorporato. Quindi è meglio non farlo.

3

È possibile utilizzare qualsiasi parola chiave diversa che segue le regole identificatore come identificativo. type non è una parola chiave, ma utilizzandola verrà applicata l'ombra del type integrato.

8

Si può, e va bene. Anche se il consiglio di non usare le shadow builtin è importante, si applica più fortemente se un identificatore è comune, in quanto aumenterà la confusione e la collisione. Non appare tipo causerà confusione qui (ma ne saprai più di chiunque altro), e potrei usare esattamente quello che hai.

+3

+1 per aver menzionato la potenziale confusione. Penso che sia un problema molto più grande del problema tecnico di possedere ombra di un builtin: qualcuno che legge il codice (forse anche la persona che lo ha scritto) potrebbe aspettarsi che 'type' si riferisca al builtin. Le possibilità di ombreggiare accidentalmente il 'tipo 'incorporato sembrano piccole in confronto: non viene usato tutto questo spesso in codice reale. –

-1

È possibile utilizzare _type per quella

# Example 
def foo(_type): 
    pass 

Se si utilizza type, non è possibile utilizzare type() in quella funzione

>>> #For Example 
>>> type('foo') 
<type 'str'> 
>>> type = 'bar' 
>>> type('foo') 
... 
Traceback (most recent call last): 
File "<input>", line 1, in <module> 
TypeError: 'str' object is not callable 
Problemi correlati