Todas las respuestas que sugieren None
son correctas; si usted quiere asegurarse de que la persona que llama puede pasar Nada como un argumento regular, utilizar un especial sentinel
y probar con is
:
class Foo(object):
__default = object()
def foo(self, blah=Foo.__default):
if blah is Foo.__default: blah = self.instavar
Cada llamada a object()
hace un objeto único, de manera que is
no tendrá éxito entre éste y cualquier otro valor Los dos caracteres de subrayado en __default
significan "fuertemente privados", lo que significa que las personas que llaman saben que no deberían tratar de meterse con él (y necesitarían bastante trabajo para hacerlo, imitando explícitamente el nombre de manipulación que está haciendo el compilador).
La razón por la que no puede usar el código que publicó, por cierto, es que los valores predeterminados se evalúan cuando se evalúa la declaración def
, no más tarde en la hora de la llamada; y en el momento en que def
evalúa, todavía no hay self
del cual tomar la variable de instancia.
Perfecto, gracias! –
use "is" para comparar None es mejor (y más rápido) – kcwu
@kcwu gracias por la sugerencia. Sabía que eran diferentes, pero hice un punto de referencia y encontré una gran diferencia de rendimiento. – Unknown