Python - variable de instancia dentro de método... ¿Porqué no?

 
Vista:
sin imagen de perfil

variable de instancia dentro de método... ¿Porqué no?

Publicado por BigfooTsp (12 intervenciones) el 20/02/2017 07:50:33
Hola.
Necesito aplicar algo similar a lo que muestro en el siguiente ejemplo y no entiendo porqué no puedo.
Imagino que habrá una respuesta lógica o que estoy haciendo alguna tontería en la que no caigo ahora pero no entiendo porque no puedo utilizar una variable de instancia como argumento dentro de un método.

1
2
3
4
5
6
7
8
9
10
11
12
13
class Suma():
 
	def __init__(self, z):
		self.z = z
 
	def suma(self, x, y=self.z):
		return x + y
 
obj = Suma(5)
print(obj.suma(2))
 
 
# NameError: name 'self' is not defined
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

variable de instancia dentro de método... ¿Porqué no?

Publicado por Ariel (1 intervención) el 20/02/2017 12:29:24
Hola, lo que podés hacer es pasar como parámetro la variable "y" con un valor nulo por defecto, para luego comprobar dentro de tu método y poder operar con esta.

Ejemplo:
1
2
def suma(self, x, y=None):
	return x + (self.z if y is None else 0)

Recordá que la propiedad "self.z" ya la definiste en el constructor __init__, por lo que la puedes utilizar en cualquier función de la clase Suma.

Saludos

Ariel
QuieroTrabajoYa.com.ar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

variable de instancia dentro de método... ¿Porqué no?

Publicado por BigfooTsp (12 intervenciones) el 20/02/2017 17:30:30
Gracias por la respuesta...
Sí, tengo una solución similar a la me has planteado, no es algo difícil de solucionar... lo que pasa es que no entiendo el motivo por el que no puedo hacer lo que planteaba en un principio y sin embargo lo siguiente sí, solamente por el hecho de que lo anterior fuera un método de un objeto.

1
2
3
4
5
6
7
8
z = 3
 
def suma(x, y=z):
	return x + y
 
print(suma(2))   # 5
 
print (suma(2,4)) # 6
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar