It's good practice for the initializer of an object to establish so-called class invariants. The invariants are truths about objects of that class that should endure for the lifetime of the object. One such invariant for flights is that the flight number always begins with an upper case two-letter airline code followed by a three or four digit route number.
In Python, we establish class invariants
in the __init__()
method and raise exceptions if they can't be attained:
class Flight: def __init__(self, number): if not number[:2].isalpha(): raise ValueError("No airline code in '{}'".format(number)) if not number[:2].isupper(): raise ValueError("Invalid airline code'{}'".format(number)) if not (number[2:].isdigit() and int(number[2:]) <= 9999): raise ValueError("Invalid route number'{}'".format(number)) self._number = number ...