Cómo asignar variables de instancia como valores predeterminados para argumentos de palabras clave en la misma clase en Python

StackOverflow https://stackoverflow.com//questions/23002587

Pregunta

En Python 3.3+, dada una clase con un método, la clase tiene una variable de instancia, que es un objeto object() simple (lo llamaremos self.FALSE).¿Cómo uso esa variable de instancia como valor predeterminado para un argumento de palabra clave?

class Test:
    def __init__(self):
        self.FALSE=object();
    def Tester(self, key=self.FALSE):
        pass;

Esto, por supuesto, no funciona porque el alcance de los valores predeterminados del argumento de la palabra clave no incluye a self (ni incluye la clase Test en general).Sin embargo, incluye variables globales y al menos algunos objetos.

¿Hay alguna forma de hacer esto?No tengo una necesidad extrema en este momento, pero sería muy bueno si pudiera hacerlo de alguna manera.Creo que podría pasar cualquier cosa como valor predeterminado de argumento de palabra clave.Seguramente debe haber una manera.

¿Fue útil?

Solución

Inicialmente tiene el valor predeterminado key como None y en la función, si key es None, luego puedes establecer el valor predeterminado, lo que quieras.

def Tester(self, key=None):
    if key is None:
        key = self.FALSE

Además, no necesita punto y coma en Python, como los necesitamos en C/C++/JAVA.

Otros consejos

No hay una manera, ya que los atributos de instancia no existen hasta que se crea una instancia, pero los métodos se definen cuando se crea la clase, antes de que existan instancias.Es decir, diciendo (como lo hace en su pregunta) que "la clase tiene una variable de instancia" es incorrecta.La clase no tiene tal cosa;Solo las instancias tienen esa variable, y solo si se crean.

Debe hacer lo que sugiere ThefourTheye y sugiere asignar un valor predeterminado dentro del cuerpo del método.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top