(1) change in area: resize to a similar triangle keeping all angles unchanged
(2) change in edge: keep other two edges same length varying only opposite angle unless not possible, raise exception
(3) change in angle: change opposite edge
Given assignment to attributes (properties), the expectation is more "state change" of an object, versus obtaining a new immutable, as with strings.
We're not calling, we're setting, the antithesis of the functional programming ideal, surrendering to objects with hidden state.
In this implementation, I'm going with more of a read-only triangle.
The initializer passes in vertexes A, B and C as (x,y) pairs and everything from then on is read-only. [2]
The emphasis might be on learning about triangles, leveraging prior knowledge of Python syntax, or on leveraging prior knowledge about triangles to learn more about how to program in Python. I think it's a two way street. [3]
Kirby