Tutte le risposte che suggeriscono None
sono corrette; Se si vuole fare in modo un chiamante può passare Nessuno come un argomento normale, utilizzare uno speciale sentinel
e test con is
:
class Foo(object):
__default = object()
def foo(self, blah=Foo.__default):
if blah is Foo.__default: blah = self.instavar
Ogni chiamata a object()
rende un oggetto unico, in modo tale che is
sarà mai successo tra esso e qualsiasi altro valore. I due trattini di sottolineatura in __default
significano "fortemente privato", il che significa che i chiamanti sanno che non dovrebbero provare a fare confusione con esso (e avrebbe bisogno di un po 'di lavoro per farlo, imitando esplicitamente il nome che il compilatore sta facendo).
Il motivo per cui non è possibile utilizzare semplicemente il codice che è stato postato, btw, è che i valori predefiniti valuteranno quando viene valutata l'istruzione def
, non più tardi al momento della chiamata; e al momento della valutazione def
, non esiste ancora self
da cui prendere la variabile di istanza.
fonte
2009-05-15 07:51:18
Perfetto, grazie! –
usa "è" per confrontare Nessuno è migliore (e più veloce) – kcwu
@kcwu grazie per il suggerimento. Sapevo che erano diversi, ma ho fatto un punto di riferimento e ho trovato una grande differenza di prestazioni. – Unknown