A side of a two dimensional Shape such as Polygon, etc. adjacent_sides: a list of sides which are adjacent to the current side angle: the angle in degrees between each adjacent side length: the length of the current side in meters >>> Side(5) Side(length=5, angle=Angle(degr
| 36 | |
| 37 | @dataclass |
| 38 | class Side: |
| 39 | """ |
| 40 | A side of a two dimensional Shape such as Polygon, etc. |
| 41 | adjacent_sides: a list of sides which are adjacent to the current side |
| 42 | angle: the angle in degrees between each adjacent side |
| 43 | length: the length of the current side in meters |
| 44 | |
| 45 | >>> Side(5) |
| 46 | Side(length=5, angle=Angle(degrees=90), next_side=None) |
| 47 | >>> Side(5, Angle(45.6)) |
| 48 | Side(length=5, angle=Angle(degrees=45.6), next_side=None) |
| 49 | >>> Side(5, Angle(45.6), Side(1, Angle(2))) # doctest: +ELLIPSIS |
| 50 | Side(length=5, angle=Angle(degrees=45.6), next_side=Side(length=1, angle=Angle(d... |
| 51 | >>> Side(-1) |
| 52 | Traceback (most recent call last): |
| 53 | ... |
| 54 | TypeError: length must be a positive numeric value. |
| 55 | >>> Side(5, None) |
| 56 | Traceback (most recent call last): |
| 57 | ... |
| 58 | TypeError: angle must be an Angle object. |
| 59 | >>> Side(5, Angle(90), "Invalid next_side") |
| 60 | Traceback (most recent call last): |
| 61 | ... |
| 62 | TypeError: next_side must be a Side or None. |
| 63 | """ |
| 64 | |
| 65 | length: float |
| 66 | angle: Angle = field(default_factory=Angle) |
| 67 | next_side: Side | None = None |
| 68 | |
| 69 | def __post_init__(self) -> None: |
| 70 | if not isinstance(self.length, (int, float)) or self.length <= 0: |
| 71 | raise TypeError("length must be a positive numeric value.") |
| 72 | if not isinstance(self.angle, Angle): |
| 73 | raise TypeError("angle must be an Angle object.") |
| 74 | if not isinstance(self.next_side, (Side, NoneType)): |
| 75 | raise TypeError("next_side must be a Side or None.") |
| 76 | |
| 77 | |
| 78 | @dataclass |