Bueno, self.angleX es un campo del objeto Triangle
Mientras que angleX es solo una variable temporal que se pasa al constructor.
Entonces, son dos variables diferentes. Y si desea obtener el valor de la variable temporal y ponerlo en el campo, debe hacerlo explícitamente, por ejemplo.
- ¿Hay alguna aplicación que oculte mi ubicación GPS?
- ¿Qué software de contabilidad debo usar?
- ¿Dónde suelen estar las aplicaciones ocultas?
- ¿Alguna vez habrá un sistema operativo que ejecute software sin la necesidad de cargarlos?
- ¿Cuáles son los programas o sistemas informáticos más controvertidos a lo largo de la historia?
self.angle1 = angle1
Bien, esa es la semántica. Ahora puedes tener dos preguntas.
¿Por qué esto tiene que ser explícito en lugar de implícito? ¿Y por qué es tan detallado?
Tiene que ser explícito porque no siempre desea poner el valor enviado al constructor directamente en el objeto. Quizás quieras hacer algo de procesamiento primero.
Por ejemplo, tal vez siempre almacene sus puntos como coordenadas x, y, pero desea que su constructor acepte polar.
Entonces tienes algo como:
Punto de clase:
def __init __ (self, a, r):
self.x = r * cos (a)
self.y = r * sin (a)
¿Por qué es tan detallado en Python? Bueno, eso es en parte solo un descuido del diseño del lenguaje. Una vez que haya visto CoffeeScript donde puede obtener el mismo efecto que su ejemplo con:
Triángulo de clase
@constructor -> (@ angle1, @ angle2, @ angle3)
plantea la pregunta.
Aquí @ sigil significa no solo el equivalente de uno mismo. Pero cuando lo usa en la lista de argumentos, le dice explícitamente a la computadora que este argumento SE debe asignar directamente a un campo en el objeto. (Si no usa la @ entonces el argumento es una variable local ordinaria como en Python).
Sin lugar a dudas, esta es una gran taquigrafía que ahorra mucho tipeo innecesario. Y Python (que es bastante elegante en muchos sentidos) lo echa de menos. Supongo que es demasiado tarde para ponerlo ahora 🙁