¿Por qué tienes que establecer nuevos argumentos en las clases?

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.

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 🙁

Porque los argumentos ocultan las variables de clase si no las hace referencia por ámbito. Si no asigna un valor a las variables de clase, esta función no estaría haciendo lo que se espera.

Muchas personas harán que sus nombres de argumento sean diferentes de los nombres de los miembros al anteponer una ‘a’ al nombre del miembro. Recuerde que los nombres de los argumentos son solo para conveniencia de la persona que llama.

HTH